[英]Could we use extern "C" in C file without #ifdef __cplusplus?
[英]Where is the best place to put the #ifdef __cplusplus extern “C” { #endif
我想知道哪里更好
#ifdef __cplusplus
extern "C" {
#endif
在C頭文件中。
在開始或之后所有其他包括。 為什么?
對此沒有嚴格的規定,但請注意以下內容。
只知道extern“C”背后的想法是它使編譯器生成C友好鏈接。 否則,使用C ++編譯器編譯的代碼會查找在使用C編譯器編譯的存檔中鏈接的錯位名稱,並且無法找到它們。
此構造用於使您的名稱可用於C鏈接器(簡短說明)
顯然你只想在你的東西周圍使用它。
像這樣 :
#ifndef MY_INCLUDE_H_ // include guard
#define MY_INCLUDE_H_
#include <...> // dependencies
#include "..."
#ifdef __cplusplus
extern “C” {
#endif
// ... your types, methods, variables
#ifdef __cplusplus
}
#endif
#endif // MY_INCLUDE_H_
外部“C”影響聯系。 當編譯C ++函數時,它們的名稱會有所不同,這就是為什么在C ++中進行重載是可能的。 因此,函數名稱會根據參數的類型和數量進行修改,因此具有相同名稱的兩個函數將具有兩個不同的符號名稱。
extern“C”中的代碼仍然是C ++代碼。 你可以在extern“C”塊中做些什么,但它們都是關於鏈接的。
extern "C"
會影響代碼的編譯方式。 設計為C和C ++編譯的標頭將自己管理extern "C"
。 你永遠不應該在一個extern "C"
塊中包含一個#include
指令:如果所涉及的頭被設計為雙向編譯你的指令是多余的,如果它不是設計為雙向使用它是一個錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.