
一个C语言的问题,关于编译预处理 5
#ifnedef_INCvxWorksh#define_INCvxWorksh#ifdef_cplusplusextern"C"{#endif/*...*/#ifdef_...
#ifnedef _INCvxWorksh
#define _INCvxWorksh
#ifdef _cplusplus
extern "C"{
#endif
/*...*/
#ifdef _cplusplus
}
#endif
#endif /* _INCvxWorksh*/
这个都是什么意思?怎么#ifdef和#enif中间还有个{ ,好头疼,根本不懂怎么回事... 展开
#define _INCvxWorksh
#ifdef _cplusplus
extern "C"{
#endif
/*...*/
#ifdef _cplusplus
}
#endif
#endif /* _INCvxWorksh*/
这个都是什么意思?怎么#ifdef和#enif中间还有个{ ,好头疼,根本不懂怎么回事... 展开
3个回答
展开全部
#ifndef _INCvxWorksh
#define _INCvxWorksh
和最后的#endif /* _INCvxWorksh*/对应,是如果没有被宏定义过(ifndef)_INCvxWorksh,则定义(define)_INCvxWorksh。
#ifndef 的最主要目的是防止头文件的重复包含和编译。/*...*/那部分是函数声明,只是省略了。
extern "C"表示编译生成的内部符号名使用C约定。是指在下面的函数不使用的C++的名字修饰,而是用C的
#define _INCvxWorksh
和最后的#endif /* _INCvxWorksh*/对应,是如果没有被宏定义过(ifndef)_INCvxWorksh,则定义(define)_INCvxWorksh。
#ifndef 的最主要目的是防止头文件的重复包含和编译。/*...*/那部分是函数声明,只是省略了。
extern "C"表示编译生成的内部符号名使用C约定。是指在下面的函数不使用的C++的名字修饰,而是用C的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实很简单,如果存在 _cplusplus (C++语言环境)
就把整段代码用extern "C" { }括起来。
类似
extern "C" {
/* C语言代码 */
}
在C语言环境中,_cplusplus没有定义,就没有这些,只剩下
/* C语言代码 */
一般来说,如果头文件里面的函数是C语言实现的,为了兼容C++都需要这样的宏。
这样做的原因是C和C++编译以后的函数名称可能不同,C语言的函数fun编译后可能变成_fun,而C++可能是fun也可能更为复杂(C++的重载特性),为了让C++编译器能够正确识别C语言的函数、变量等,设计了extern "C" 这种特殊用法。
就把整段代码用extern "C" { }括起来。
类似
extern "C" {
/* C语言代码 */
}
在C语言环境中,_cplusplus没有定义,就没有这些,只剩下
/* C语言代码 */
一般来说,如果头文件里面的函数是C语言实现的,为了兼容C++都需要这样的宏。
这样做的原因是C和C++编译以后的函数名称可能不同,C语言的函数fun编译后可能变成_fun,而C++可能是fun也可能更为复杂(C++的重载特性),为了让C++编译器能够正确识别C语言的函数、变量等,设计了extern "C" 这种特殊用法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#ifdef _cplusplus
extern "C"{
#endif
上面这一段和下面这一段
#ifdef _cplusplus
}
#endif
如果是C++的话 展开以后是
extern "C" {
}
如果不是C++的话
则没有这个
但是/*...*/那部分是有没有都要执行的
所以加了两个宏把上下两半包起来了
extern "C"{
#endif
上面这一段和下面这一段
#ifdef _cplusplus
}
#endif
如果是C++的话 展开以后是
extern "C" {
}
如果不是C++的话
则没有这个
但是/*...*/那部分是有没有都要执行的
所以加了两个宏把上下两半包起来了
追问
您的意思是不是,如果是C++的话,第5行和第7行就相当于没有?然后/*...*/这一部分用C编译器编译而不用C++编译器编译?如果不是C++的话,整个就只剩下/*...*/,自然就用C编译/*...*/这一部分,是这意思吗?
追答
对的
百度一下extern关键字就更清楚了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询