LINUX.ORG.RU

История изменений

Исправление kawaii_neko, (текущая версия) :

Существует ли способ вернуть имени NUM восьмерку?

Только #define NUM 8. Макроподстановки происходят в момент использования, а не в момент объявления. Собственно, у тебя вообще полная фигня происходит, gcc -E тебе в помощь:

#define NUM 8

num is NUM
#ifdef NUM
# define pre_NUM NUM
# undef NUM
#endif

pre num is pre_NUM
#define NUM 4
pre num is pre_NUM

#undef NUM
#if defined pre_NUM
# define NUM pre_NUM
# undef pre_NUM
#endif
$ gcc -E /tmp/x.c
# 1 "/tmp/x.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "/tmp/x.c"


num is 8





pre num is NUM

pre num is 4

Исходная версия kawaii_neko, :

Существует ли способ вернуть имени NUM восьмерку?

Только #define NUM 8. Макроподстановки происходят в момент использования, а не в момент объявления. Собственно, у тебя вообще полная фигня происходит, gcc -E тебе в помощь:

#define NUM 8

num is NUM
#ifdef NUM
# define pre_NUM NUM
# undef NUM
#endif

pre num is pre_NUM
#define NUM 4
pre num is pre_NUM

#undef NUM
#if defined pre_NUM
# define NUM pre_NUM
# undef pre_NUM
#endif
gcc -E /tmp/x.c
$ gcc -E /tmp/x.c 
# 1 "/tmp/x.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "/tmp/x.c"


num is 8





pre num is NUM

pre num is 4