社区
C语言
帖子详情
请问大侠:是不是只要用extern "C" 声明,编译器就会以C风格编译?
himachao
2003-08-23 03:03:42
是不是只要用extern "C" 声明,编译器就会以C风格编译?
...全文
22
14
打赏
收藏
请问大侠:是不是只要用extern "C" 声明,编译器就会以C风格编译?
是不是只要用extern "C" 声明,编译器就会以C风格编译?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
金笛子
2003-08-24
打赏
举报
回复
我同意aflyinghorse
aflyinghorse
2003-08-24
打赏
举报
回复
关于函数名的重整(name mangling)
可以参考More Effective C++ Item 34
有比较详细的论述
loyyer
2003-08-24
打赏
举报
回复
就是这样
ttlb
2003-08-24
打赏
举报
回复
多谢
violetblue
2003-08-24
打赏
举报
回复
好像是这样的
因为在c里没有函数名重用一说,就是不允许函数名相同的多个函数出现,所以像下面的函数
void Fun(int i)
c里编译成Fun(),而c++里编译成Fun_int()
可能不太确切,不过大致是这个意思。
grail0922
2003-08-23
打赏
举报
回复
extern关键字是为了C++编译器与非C++代码进行连接而起作用的。
不同语言,或者同一语言的不同实现可能在以下几个方面存在差异:
1)使用寄存器保存差数的方式;
2)将参数放入堆栈的顺序;
3)整数或字符串等内部类型的布局;
4)编译器传替给连接器的名字;
5)对连接器所要求的地类型检查的量方面。
extern "c"就是声明函数按照C的连接约定进行连接,并不影响调用函数的语义。仍然要遵守C++的类型检查和参数转换规则,而不是C的教弱的规则;
编译时,编译器会给C函数名前加上一个特定的前缀,和其他的C++函数名进行区别,这就是上面所谓的“函数名重整”(此说法的正确信我没有进行考察)
另外,这并不仅仅是适用于调用C库函数,对自定义库函数和其他自定义C函数都是可以得。
暂时说这么多,如果解答的不好请大家见谅。
ttlb
2003-08-23
打赏
举报
回复
回复人: aflyinghorse() ( ) 信誉:100 2003-08-23 16:17:00 得分:0
extern "C"用作C和C++的混合编程
如在C++中调用C的库函数,把C库函数的声明
用extern "C"表示,这些函数就按C的方式编译,
不对函数名进行重整
请问什么是“函数名重整”?
Meyer
2003-08-23
打赏
举报
回复
yes
new1mm
2003-08-23
打赏
举报
回复
ty
njtu
2003-08-23
打赏
举报
回复
extern "C" 用作C++中的C标记。
可以指定使用C方式编译,不过更多地用法是指明你要调用的函数是一个C函数;
#ifdef __cplusplus
extern "C" void myfunc( void);
#endif
davidwoo
2003-08-23
打赏
举报
回复
就是这样
zxszx
2003-08-23
打赏
举报
回复
同意
ehhl
2003-08-23
打赏
举报
回复
恩,楼上的很对,同意
aflyinghorse
2003-08-23
打赏
举报
回复
extern "C"用作C和C++的混合编程
如在C++中调用C的库函数,把C库函数的声明
用extern "C"表示,这些函数就按C的方式编译,
不对函数名进行重整
《C深度解析》第7、8章 结构体/共用体/枚举,杂项(自动类型转换、大小端序等)
第7章:1. 结构体结构体定义、访问、传参,结构体对齐(offsetof宏、contaner_of宏),结构体内嵌函数指针,程序分层,模块化等。2. 共用体共用体与结构体的异同、共用体的作用、共用体举例3. 枚举第8章:自动类型转换、大小端序、typedef、
编译
器
优化、
extern
C、程序调试、变参函数、dowhile(0)、内嵌汇编、调试版与发行版、断言
C语言取
extern
变量的大小
说明:程序
编译
环境Keil uVision5 本来想用sizeof计算一个数组的大小,于是建立了一个file1.c文件,并在file1.c有如下程序: /********** Code Start **************/ int intArray[ ] = {2,3,4}; //因为此数组的长度可能
会
加长,所以并没有指定数组长度 unsi
【python学习笔记】:调用C/C++程序的方法
由于C++支持函数重载,在g++以C++方式
编译
时
编译
器
会
给函数的名称附加上额外的信息,这样ctypes模块就
会
找不到g++
编译
生成的函数。-L path:表示在path目录中搜索库文件,如-L.表示在当前目录;- 3、在Python中调用
编译
生成的库。Python在调用C/C++程序时有一些不同,需要注意。Python调用C语言程序比较简单,将C语言程序
编译
好,再使用python中的ctypes模块调用即可。生成libpycall.so动态库文件,之后就可以在Python中调用foo函数。
c语言程序调试时无法启动程序,
编译
没有异常,调试时报错: 无法启动程序“C:Projects\Driver\mydriver_check\HelloDDk.sys...
当前位置:我的异常网» VC/MFC»
编译
没有异常,调试时报错: 无法启动程序“C:Projec
编译
没有异常,调试时报错: 无法启动程序“C:Projects\Driver\mydriver_check\HelloDDk.syswww.myexceptions.net网友分享于:2013-01-24浏览:94次
编译
没有错误,调试时报错: 无法启动程序“C:Projects\Driver...
.c和.h文件的区别
一个简单的问题:.c和.h文件的区别学了几个月的C语言,反而觉得越来越不懂了。同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼:子程序不要定义在.h中。函数定义要放在.c中,而.h只做
声明
.否则多引用几次,就
会
发生函数重复定义的错误。3楼:.h只做
声明
,
编译
后不产生代码4楼: 这样做目的是为了实现软件的模块化使软件结构清晰,而且也便于别人
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章