我正在编译我的程序,它将在linux的gcc 4.4.1 C99上运行。
我只是将我的#定义放在其中,以分离将在windows或linux上编译的代码。然而,我得到了这个错误。
error: macro names must be identifiers.
使用以下代码
#ifdef(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif
但是,当我改为这样时,错误就被修复了:
#if defined(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif
我只是想知道为什么我得到了这个错误,为什么#定义是不同的?
非常感谢,
发布于 2009-11-11 18:11:11
如果使用#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
发布于 2012-10-20 21:00:13
#ifdef FOO
和
#if defined(FOO)
是一样的,
但是要同时做几件事,你可以使用定义的,比如
#if defined(FOO) || defined(BAR)
发布于 2009-11-11 18:23:30
#ifdef
检查是否定义了同名的宏,#if
计算表达式并检查真值
#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
https://stackoverflow.com/questions/1714245
复制相似问题