Я ожидал, что код выведет suse.sys, но на самом деле он выводит win.sys. Почему это так?
#define SYS SUSE
#if SYS == WIN
#define HDR "win.sys"
#elif SYS == SUSE
#define HDR "suse.sys"
#else
#define HDR "default.sys"
#endif
#include HDR
#include <stdio.h>
int main()
{
char *name = HDR;
printf("%s\n", name);
return 0;
}
Это похоже на пример во втором издании языка программирования C. Файлы .sys ничего не содержат, они бесполезны.
HDR
иSUSE
? - person unwind   schedule 09.07.2014SUSE
может вообще не быть определено... также:char *name
должно бытьconst char *name
(придирка) - person Elias Van Ootegem   schedule 09.07.2014WIN
, а неHDR
, конечно. - person unwind   schedule 09.07.2014WIN == SUSE
? - person n0p   schedule 09.07.2014SYS
,WIN
иSUSE
, посмотрите, не совпадает ли значениеWIN
со значениемSUSE
- person Elias Van Ootegem   schedule 09.07.2014#if
заменяется на#if SUSE == WIN
,SUSE
иWIN
(я предполагаю) не определены, поэтому по умолчанию они равны 0 (потому что они используются в арифметическом выражении), поэтому он оценивается как#if 0 == 0
, что равно 1, поэтомуHDR
определено до"suse.sys"
. Кажется, вы хотите сравнить строки препроцессором, что невозможно. - person mafso   schedule 09.07.2014#define WIN 0
и#define SUSE 1
или что-то в этом роде. - person Ben   schedule 09.07.2014