LINUX.ORG.RU

Почему препроцессор и компилятор так себя ведут?

 , , ,


0

1

Приветствую.
Что по-вашему должна выводить такая программа?

#include <stdio.h>

#define WTF     0
#define c       2 * 3 

int main (int argc, char *argv[]) {
        for (int i = 0; i < 8; i++) {
                printf("%d / %d = %d\n", i, c, i / c);
                printf("%d / 6 = %d\n\n", i, i / 6);
        }

        return WTF;
}
gcc -std=c99 -o test test.c && ./test
Для меня результат оказался крайне неочевидным. Объясните, пожалуйста, как и почему происходит то, что происходит!

★★★★★

Последнее исправление: CYB3R (всего исправлений: 1)

Препроцессор заменяет макросы перед компиляцией, соответственно, получается строчка

i / 2 * 3

Поэтому результат очевиден

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

Спасибо, всё очень логично.

CYB3R ★★★★★
() автор топика

Потому, что читать документацию — для ботаников и лохов.

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