关于g++编译c函数问题?C/C++ code//1.c//g++ 1.c -o 1#include stdio.hint main(){printf()return 1
关于g++编译c函数问题?
- C/C++ code
//1.c//g++ 1.c -o 1#include <stdio.h>int main(){ printf(""); return 1;}用g++编译以上程序为什么能通过?不是说调用的时候要extern "C"{#include <stdio.h>}的吗?[解决办法]
两种编译方式好像是不一样的。
[解决办法]
有两个潜在的问题(没有关系):
1 编译器可能根据扩展名来决定name convention,因此1.c的扩展名暗示了compiler用C convention编译。你加不加extern "C"都一样。
2 extern "C" 指导C++编译器采用C convention进行编译。这主要是用语在C++程序里面,导入链接已经用C编译好的库(后面解释)。
如果你以源码的方式编译整个工程,或导入用C++编译好的库,可以不用加extern "C"。
因为使用C编译好的库,这些库已经通过C convention变成了符号存在于lib中,你在C++中通过导入这些库的h文件,也必须用C convention,因为你无法在编译期重新编译存在于库中的代码符号,只能在链接期进行链接。因此不同的convention会导致这些C lib中的库代码符号在链接期无法被找到。
