我正在编译将在linux gcc 4.4.1 C99上运行的程序.
我只是把我的#defines放在一起分开将在windows或linux上编译的代码.但是,我收到了这个错误.
error: macro names must be identifiers.
Run Code Online (Sandbox Code Playgroud)
使用此代码
#ifdef(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif
Run Code Online (Sandbox Code Playgroud)
但是,当我更改为此错误时,错误已得到修复:
#if defined(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif
Run Code Online (Sandbox Code Playgroud)
我只是想知道为什么我得到了这个错误以及为什么#defines不同?
非常感谢,
use*_*556 149
如果使用#ifdef语法,请删除括号.
两者之间的区别在于,#ifdef只能使用单一条件,
而#if defined(NAME)可以使用复合条件.
例如在你的情况下:
#if defined(WIN32) && !defined(UNIX)
/* Do windows stuff */
#elif defined(UNIX) && !defined(WIN32)
/* Do linux stuff */
#else
/* Error, both can't be defined or undefined same time */
#endif
Run Code Online (Sandbox Code Playgroud)
小智 46
#ifdef FOO
Run Code Online (Sandbox Code Playgroud)
和
#if defined(FOO)
Run Code Online (Sandbox Code Playgroud)
是相同的,
但要一次做几件事,你可以使用定义的,比如
#if defined(FOO) || defined(BAR)
Run Code Online (Sandbox Code Playgroud)
joh*_*nes 23
#ifdef检查是否已定义该名称的宏,#if计算表达式并检查true值
#define FOO 1
#define BAR 0
#ifdef FOO
#ifdef BAR
/* this will be compiled */
#endif
#endif
#if BAR
/* this won't */
#endif
#if FOO || BAR
/* this will */
#endif
Run Code Online (Sandbox Code Playgroud)