12.3 在C++中使用C頭文件
本節(jié)描述如何在C++代碼中使用C頭文件。從C++調(diào)用C頭文件之前,C頭文件必須包含在extern "C"命令中。本節(jié)包含以下兩部分內(nèi)容:
· 在C++中使用系統(tǒng)的C頭文件;
· 在C++中使用自定義的C頭文件。
12.3.1 在C++中使用系統(tǒng)C頭文件
要包括標(biāo)準(zhǔn)的系統(tǒng) C 頭文件,如 stdio.h,不必進(jìn)行任何特殊操作。只有使用extern "C" 命令,由編譯器自動(dòng)包含標(biāo)準(zhǔn) C 頭文件。例如:
#include <stdio.h>
int main()
{
... // C++ 代碼
return 0;
}
如果使用此語法包含頭文件,則所有庫名都放在全局命名空間中。
C++標(biāo)準(zhǔn)規(guī)定可以通過特定的C++頭文件獲取C頭文件。這些文件與標(biāo)準(zhǔn)C頭文件一起安裝在install_directory\RVCT\Data\2.0\build_num \include \platform目錄下,可以用常規(guī)方法進(jìn)行引用。例如:
#include <cstdio>
int main()
{
... // C++ 代碼
return 0;
}
在ARM C++中,這些頭文件中包含(#include)C頭文件。如果使用此語法包含頭文件,則所有C++標(biāo)準(zhǔn)庫名都在命名空間std中定義,包括C庫名。這意味著必須使用下列方法之一來限定所有的庫名稱。
· 指定標(biāo)準(zhǔn)命名空間,例如:
std::printf("example\n");
· 使用C++關(guān)鍵字“using”向全局命名空間輸入一個(gè)名稱:
using namespace std;
printf("example\n");
· 使用編譯程序選項(xiàng) --using_std。
12.3.2 在C++中使用自定義的C頭文件
要包含自己的C頭文件,用戶必須將#include命令包在extern "C"語句中??梢杂靡韵路椒ㄍ瓿纱瞬僮鳎?/p>
① 在#include文件之前使用extern,如下例所示。
// C++ code
extern "C" {
#include "my-header1.h"
#include "my-header2.h"
}
int main()
{
// ...
return 0;
}
· 將extern "C"語句添加到頭文件,如下例所示。
/* C header file */
#ifdef __cplusplus /* Insert start of extern C construct */
extern "C" {
#endif
/* Body of header file */
#ifdef __cplusplus /* Insert end of extern C construct */
} /* The C header file can now be */
#endif /* included in either C or C++ code. */