几乎每个文件里面都有 #ifdef __cplusplus extern "C" { #endif 可我没找到程序里那个地方定义了__cplusplus 啊?这又是怎么回事呢?
我们的C语言有个进化版,叫C++,这个想必楼主知道,Keil MDK是支持C++编程的,也就是说,你可以用C语言或者C++写你的程序,都可以。
但是,有一个问题,就是头文件的问题,C语言写的头文件C++是不认识的,需要转换一下,这个转换的方法就是加上extern "C"
#ifdef __cplusplus
extern "C" {
}
这句话意思是,如果你定义了“__cplusplus”这个宏,说明你的意图是想在C++文件中调用这个头文件,我前头说了,C语言的头文件C++是不认识的,怎么办呢,就加上
extern "C" {。。。。。}
告诉C++文件,大括号里面的东西是用C语言写的,然后C++文件就认识了,就能调用这个头文件里的东西了,
extern "C" {
}
的存在,使得C语言和C++能更好的结合的一块。
几乎每个文件里面都有 #ifdef __cplusplus extern "C" { #endif 可我没找到程序里那个地方定义了__cplusplus 啊?这又是怎么回事呢?的更多相关文章
- #ifdef __cplusplus extern c #endif 的作用
		#ifdef __cplusplus // C++编译环境中才会定义__cplusplus (plus就是"+"的意思) extern "C" { // 告诉编 ... 
- “#ifdef __cplusplus extern "C" { #endif”的定义
		平时我们在linux c平台开发的时候,引用了一些Cpp或者C的代码库,发现一些头文件有如下代码条件编译. #ifdef __cplusplus extern "C" { #end ... 
- “#ifdef __cplusplus extern "C" { #endif”的定义-----C和C++的互相调用
		"#ifdef __cplusplus extern "C" { #endif"的定义 看一些程序的时候老是有 "#ifdef __cplusplus ... 
- #ifdef __cplusplus extern "C" { #endif”的定义
		平时我们在linux c平台开发的时候,引用了一些Cpp或者C的代码库,发现一些头文件有如下代码条件编译. #ifdef __cplusplus extern "C" { #e ... 
- #ifdef __cplusplus extern "C" { #endif”的定义的含义
		看一些程序的时候老是有“#ifdef __cplusplusextern "C" {#endif”的定义,搞搞清楚是怎么回事: Microsoft-Specific Predefi ... 
- C++ 为什么要使用#ifdef __cplusplus extern "C" { #endif
		转载:http://www.cnblogs.com/ayanmw/archive/2012/03/15/2398593.html 转载:http://blog.csdn.net/zkl99999/ar ... 
- 备忘录:“#ifdef __cplusplus extern "C" { #endif”的定义
		看一些程序的时候老是有“#ifdef __cplusplusextern "C" {#endif”的定义,搞搞清楚是怎么回事: Microsoft-Specific Predefi ... 
- undefined reference to `recvIpcMsg(int, ipc_msg*)'——#ifdef __cplusplus extern "C" { #endif
		最近在弄一个进程间通信,原始测试demon用c语言写的,经过测试ok,然后把接口封装起来了一个send,一个recv. 使用的时候send端是在一个c语言写的http服务端使用,编译ok没有报错,但是 ... 
- #ifdef __cplusplus extern "C" { #endif
		1.在好多程序中我们会遇到下面代码段 #ifdef __cplusplus extern "C" { #endif //c语法代码段 #ifdef __ ... 
随机推荐
- POSIX多线程编程(上)-基本概念
			线程概念 我们把正在计算机中执行的程序叫做"进程"(Process) ,而不将其称为程序(Program).所谓"线程"(Thread),是"进程&q ... 
- secondarynamenode异常
			secondarynamenode异常 -- ::, ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception ... 
- [转载]Asp.net MVC2 与 MVC3 路由调试好帮手RouteDebug 与 RouteDebugger
			RouteDebug 与 RouteDebugger是什么? 在Asp.Net MVC程序中,路由(Route)是一个非常核心的概念,可以说是MVC程序的入口,因为每一个Http请求都要经过路由计算, ... 
- loadrunner_analysis技巧_average 和 90% percent
			“90% Percent Time” 表示90%的事务response time 都维持在某个值附近,不是 average response time * 90%; “Average Time” 平 ... 
- [杂题]CSUOJ1413 Area of a Fractal
			题目链接 题意:题中给了图,所以不看字大概也知道 求的是第n个图形的面积. 就是找规律 递推 一类的... 先给结论: 很鬼畜的公式: $\displaystyle\frac{3\times ... 
- 安装Ubuntu服务器
			安装edX首先需要一台linux或Mac系统的电脑/服务器. 这里以常见的Ubuntu作为服务器系统. Ubuntu的官方网站为http://www.ubuntu.com,中文网站为http://ht ... 
- USB Type-C,接口上的大统一?
			这款 24-pin 连接器的机械设计反应了设计人员从 Micro-B 连接器上获得的历史教训,它无需确定插入的正反方向并可实现 10000 次的插拔.使用者再也不需要担心“哪头上,哪头下”,因为 US ... 
- 优化 Android 线程和后台任务开发
			在 Android 开发中,你不应该做任何阻碍主线程的事情.但这究竟意味着什么呢?在这次海湾 Android 开发者大会讲座中,Ari Lacenski 认为对于长时间运行或潜在的复杂任务要特别小心. ... 
- java中遍历List中的map问题
			List list = new ArrayList();Map map = null; while (rs.next()) { map = new HashMap(); map.put("f ... 
- eclipse 新建项目下后.metadata\.plugins的文件夹解释和如何保存自己的特定工程设置
			eclipse 新建项目下后.metadata\.plugins的文件夹解释和如何保存自己的特定工程设置 [org.eclipse.core.runtime] 字体,maven的setting.xml ... 
