C/C++のextern「C」について

1259 ワード

C言語ヘッダファイルにおけるextern"C"の役割は、C++コンパイラがCコンパイラによって生成されたバイナリコードを呼び出すことができるようにするためであることはよく知られている.C++が関数のリロードをサポートするなどの理由で、C++とCコンパイラがバイナリコードを生成する関数の名前は異なります.ただし、extern"C"を持つソースコードを直接C++コンパイラでコンパイルすると、生成されたコードは直接Cコードに使用できますか?
    テストの結果、答えは:はい.
    テストコードは次のとおりです.
test.h
#ifndef _TEST_H_
#define _TEST_H_

#ifdef __cplusplus
extern "C"
{
#endif

void test();

#ifdef __cplusplus
}
#endif

#endif

test.c
#include "test.h"
#include "stdio.h"

void test()
{
	printf("dddddd");
}

g++コンパイラを使用して、上記のコードをコンパイルします.
[root@localhost test]# g++ test.c -c 
[root@localhost test]# nm test.o 
         U printf
00000000 T test
[root@localhost test]#

コンパイルによって生成されたコードはgccコンパイラを使用することと一致し、このコードはCコードによって呼び出されることができる.
enter.c
#include "test.h"

int main()
{
	test();

	return 0;
}
[root@localhost test]# gcc enter.c -c
[root@localhost test]# gcc enter.o test.o -o enter
[root@localhost test]# ./enter
dddddd[root@localhost test]#

結論:C++コンパイラでコンパイル
extern“C”を持つソースファイル、発生したコードはCコードによって呼び出すことができます