首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >#if defined(WIN32)和#ifdef(WIN32)的区别

#if defined(WIN32)和#ifdef(WIN32)的区别
EN

Stack Overflow用户
提问于 2009-11-11 18:09:17
回答 4查看 108.1K关注 0票数 147

我正在编译我的程序,它将在linux的gcc 4.4.1 C99上运行。

我只是将我的#定义放在其中,以分离将在windows或linux上编译的代码。然而,我得到了这个错误。

代码语言:javascript
复制
error: macro names must be identifiers.

使用以下代码

代码语言:javascript
复制
#ifdef(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif

但是,当我改为这样时,错误就被修复了:

代码语言:javascript
复制
#if defined(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif

我只是想知道为什么我得到了这个错误,为什么#定义是不同的?

非常感谢,

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-11 18:11:11

如果使用#ifdef语法,请删除括号。

两者之间的区别在于,#ifdef只能使用单个条件,

#if defined(NAME)可以做复合条件句。

例如,在您的案例中:

代码语言:javascript
复制
#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
票数 205
EN

Stack Overflow用户

发布于 2012-10-20 21:00:13

代码语言:javascript
复制
#ifdef FOO

代码语言:javascript
复制
#if defined(FOO)

是一样的,

但是要同时做几件事,你可以使用定义的,比如

代码语言:javascript
复制
#if defined(FOO) || defined(BAR)
票数 62
EN

Stack Overflow用户

发布于 2009-11-11 18:23:30

#ifdef检查是否定义了同名的宏,#if计算表达式并检查真值

代码语言:javascript
复制
#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
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1714245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档