关于g++编译c函数有关问题

关于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中的库代码符号在链接期无法被找到。