LINUX.ORG.RU

вычисление значений


0

0

#define CHISLO1 5
#define CHISLO2 (5+3)
#define CHISLO3 (CHISLO2+12)

int i=CHISLO1+5;
if(i==CHISLO3){}
Подскажите когда будут вычисляться эти значения в процессе компиляции или каждый раз в процессе выполнения программы.


"в процессе компиляции"

fura13 ★★★
()

> Подскажите когда будут вычисляться эти значения в процессе компиляции или каждый раз в процессе выполнения программы.

Скомплируй в ассемблерный код и посмотри, вычислились ли они в процессе компиляции.

anonymous
()

Зависит от компилятора и, возможно, опций оптимизации, но вообще-то арифметику на константах компилятор должен вычислять и выбрасывать, так же, как и блоки по заведомо ложным условиям. Т.е. код

int i = 3 + 5; if (i < (1 + 1) * 2) { foo(); }

будет откомпилирован аналогично

int i = 10;

anonymous
()
Ответ на: комментарий от anonymous

#include <stdlib.h>
#include <stdio.h>

Вариант 1
int main(void)
{
int a,b;

a=9;
printf("%d\n",a);
b=29;
printf("%d\n",b);
}
Вариант 2
int main(void)
{
int a,b;

a=5+4;
printf("%d\n",a);
b=10+10+a;
printf("%d\n",b);
}
Скомпилировал почемуто код разный получается

CL
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.