簡體   English   中英

在標頭而不是源文件(cpp / h)中聲明變量之間有什么區別

[英]What is the difference between declaring a variable in a header instead of the source file (cpp/h)

在標頭中 聲明變量在源代碼中聲明變量之間有什么區別嗎? 例如性能證券

完全沒有區別。 除非它們最好以支持以下方式編寫:

  • 多個模塊可以包括標題以共享數據結構
  • 並共享函數聲明。
  • 通常會寫一個標頭,以便它不會多次聲明其內容。

     #ifndef __THIS_HEADER_H #define __THIS_HEADER_H 1 .... (content of header which is protected from multiple insertions) #endif 

一個模塊可能包含一個.c文件,但是這種用法很少(不推薦):

交流電:

 #define PERSONALITY   1
 #include "main_logic.c"

公元前:

 #define PERSONALITY   2
 #include "main_logic.c"

main_logic.c:

 #if PERSONALITY == 1
 int main (void)
 {
    printf ("personality 1\n");
 }
 #endif

 #if PERSONALITY == 2
 int main (void)
 {
    printf ("personality 2\n");
 }
 #endif

在標頭中聲明變量使它們可以使用#include<...>包含在所有包含此標頭的文件中。 在cpp文件中對其進行聲明將使其僅可用於此文件中的代碼。

這是因為cpph文件一起工作的方式。

  • h文件始終包含cpp文件。 此處無需包含聲明。
  • 其他文件(包括h文件)將獲取h文件中的內容,而不是cpp文件中的內容,因此聲明的變量超出范圍。

h文件包含所有聲明,而相應的cpp文件應包含這些聲明的代碼。

(也供將來的讀者使用)請注意,僅使用h文件來避免看似復雜的情況是非常糟糕的做法,因為那樣的話,您將不會使用非常好的語言功能,並且會做到這一點(使用類除外) )無法將私有函數與公共函數和變量分開。

另外,還有一點需要注意: h文件是分布式的,而它們的代碼( cpp文件中的代碼則被編譯為二進制文件。因此,為了不向所有人公開您的代碼並使頭文件保持較小,您應該適當地將其拆分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM