對於stdio.h 之類的頭文件,在C++中使用時,編譯器是怎樣處理的?
12-06
#ifndef hello
#define hello
#ifdef __cplusplus
extern "C"
{
#include &
}
#endif
#endif
是否有必要這樣寫頭文件來保證標準庫的函數、變數不會被C++編譯器修飾而導致鏈接失敗。
即使不這樣寫,g++編譯器同樣沒有對printf進行修飾。
而且在stdio.h 中也沒有發現extern "C" 之類的字眼。
這是怎麼回事?
謝邀,有extern "C",只是gcc 用的是:
__BEGIN_DECLS
__END_DECLS
而這個在cdefs.h [glibc/misc/sys/cdefs.h]可以找到對應的定義:
/* C++ needs to know that types and declarations are C, not C++. */
#ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# define __END_DECLS }
#else
# define __BEGIN_DECLS
# define __END_DECLS
#endif
C++要使用C中的頭文件的話推薦使用c開頭的頭文件,比如
#include &
#include &
#include &
看gcc –E 預處理之後的代碼
推薦閱讀:
※Phi node 是如何實現它的功能的?
※如何抽象評判現有語言優劣,繼而設計一款別具優雅的計算機語言 X ?
※解釋器里出錯列印調用堆棧是怎麼實現的?