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
Для меня результат оказался крайне неочевидным. Объясните, пожалуйста, как и почему происходит то, что происходит!

★★★★★

6 / 2 * 3 == 9

6 / 6 == 1

Всё нормально, порядок действий.

PolarFox ★★★★★ ()

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

i / 2 * 3

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

BlackHawk ()

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

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