回 帖 发 新 帖 刷新版面

主题:ifdef __cplusplus问题?

ifdef __cplusplus问题?

// MyCFuncs.h 
#ifdef __cplusplus[b]-------0[/b]
extern "C" { 
#endif[b] --------1[/b]

。。。。。。
。。。。。。
。。。。。。
。。。。。。

#ifdef __cplusplus [b]--------2[/b]

#endif [b]------3[/b]

那位大侠能否解释一下为什么要有0、1、2、3处这个几个关键字?那个和那个对应?
__cplusplus是常量还是宏定义? 
我知道extern "C"的意思为了让{}里面的程序按C的编译方式编译,但是为什么一开始就有1,结束时有2,而且这两个是不是反了?

谢谢啊!我是新来的!

回复列表 (共2个回复)

沙发

#ifdef __cplusplus是个预处理命令。
C语言的预处理命令包括:宏定义、文件包含和条件编译。
你程序中所指的预处理命令是条件编译语句,程序中0-1语句对应,2-3语句对应。
__cplusplus是个标识符,可以是宏定义也可以是定义的常量、变量等。


#ifdef __cplusplus-------0
extern "C" { 
#endif --------1
上面的语句意思是说,如果定义了__cplusplus标识符,那么extern "C" { 参与编译,反之则不参与编译。
这样的预处理命令对程序调试,程序多平台移植很有用。你的程序包含很多头文件的时候为了避免标识符的多次定义,减少编译错误,通常使用得很多。

建议你学习《c程序设计》清华大学出版社 谭浩强著,第九章 预处理命令。

板凳

从你的程序中看,我推测,你的程序是用C语言和C++语言混合写成,__cplusplus是个宏。如果定义了__cplusplus那么告诉编译器以后的程序用C语言编写,不要按C++的原则来编译以后的程序。

extern "C"的用法见:
http://dev.csdn.net/article/66/66384.shtm

我来回复

您尚未登录,请登录后再回复。点此登录或注册