判断C 还是C++编译器
来源:百度文库 编辑:神马文学网 时间:2024/04/29 00:46:06
如何判断一段程序是由C 编译程序还是由C++编译程序编译的 收藏
以下是在论坛中看到的两种解释:
(1)如果是要你的代码在编译时发现编译器类型,就判断_cplusplus或_STDC_宏,通常许多编译器还有其他编译标志宏,
#ifdef __cplusplus
cout<<"c++";
#else
cout<<"c";
#endif
如果要判断已经编译的代码的编译类型,就用nm查一下输出函数符号是否和函数名相同。(相同为c,不同为c++。详解见下面)
(2)
简单是说,由于c语言是没有重载函数的概念的,所以c编译器编译的程序里,所有函数只有函数名对应的入口。而由于c++语言有重载函数
的概念,如果只有函数名对应的入口,则会出现混淆,所以c++编译器编译的程序,应该是函数名+参数类型列表对应到入口。
注意,因为mian函数是整个程序的入口,所以mian是不能有重载的,所以,如果一个程序只有main函数,是无法确认是c还是c++编译器
编译的
可以通过nm来查看函数名入口
如一个函数
int foo(int i, float j)
c编译的程序通过nm查看
foo 0x567xxxxxx (地址)
c++编译程序,通过nm查看
foo(int, float) 0x567xxxxxx
另外,如果要在c++编译器里使用通过c编译的目标文件,必须通知c++编译器,我使用的函数是c风格的,不需要列出参数列表的,这样c++编译才能正确的连接
extern "c" foo;
以下是在论坛中看到的两种解释:
(1)如果是要你的代码在编译时发现编译器类型,就判断_cplusplus或_STDC_宏,通常许多编译器还有其他编译标志宏,
#ifdef __cplusplus
cout<<"c++";
#else
cout<<"c";
#endif
如果要判断已经编译的代码的编译类型,就用nm查一下输出函数符号是否和函数名相同。(相同为c,不同为c++。详解见下面)
(2)
简单是说,由于c语言是没有重载函数的概念的,所以c编译器编译的程序里,所有函数只有函数名对应的入口。而由于c++语言有重载函数
的概念,如果只有函数名对应的入口,则会出现混淆,所以c++编译器编译的程序,应该是函数名+参数类型列表对应到入口。
注意,因为mian函数是整个程序的入口,所以mian是不能有重载的,所以,如果一个程序只有main函数,是无法确认是c还是c++编译器
编译的
可以通过nm来查看函数名入口
如一个函数
int foo(int i, float j)
c编译的程序通过nm查看
foo 0x567xxxxxx (地址)
c++编译程序,通过nm查看
foo(int, float) 0x567xxxxxx
另外,如果要在c++编译器里使用通过c编译的目标文件,必须通知c++编译器,我使用的函数是c风格的,不需要列出参数列表的,这样c++编译才能正确的连接
extern "c" foo;
判断C 还是C++编译器
C编译器错误信息中文翻译
C编译器错误信息中文翻译
使用C编译器产生清晰的二进制文件
C语言编译器MINGW的使用说明
C 语言之四 编译器(转)
cl.exe Microsoft C/C++编译器
Linux上的C/C 编译器gcc/egcs详解
Linux上的C/C 编译器gcc/egcs详解
转帖:KEIL C编译器常见警告与错误信息的解决办法
Keil C 编译器常见警告与错误信息的解决方法
在 console mode 中使用 C/C 编译器 - Kevin的专栏 - CSDNBlog
C 语言之四 编译器(转) - C语言技巧讨论 - jiuzhuaxiong
在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
keil c编译器错误与解决方法 - babylon_0049的专栏 - CSDN博客
补充维生素C 食补还是药补
如何判断主力筹码锁定,建仓已进入尾声c
电脑故障维修判断指导大全(四)c
C/C 面试题目
什么是4P/4C/4R/4P好还是4C好
C\C 指针 - D3D - C 博客
c语言
C extern
C extern