簡體   English   中英

我們是否應在.h和.cpp文件中都包含宏(#define)

[英]Should we include a macro(#define) in both .h & .cpp files

如果我在兩個文件中都使用它們。 與c ++中的“宏”一起使用,它只是在預編譯階段發生的一種替換機制(對c ++結構一無所知)。

這是我應該在兩個文件中都定義宏(#define)還是不需要這樣做的原因,或者我什么都沒有。

在.h文件中定義宏,然后僅在.cpp文件中包含該.h文件就足夠了。

首先假設一個簡單的案例。 您具有使用.h文件的.cpp文件:

  • Car.cpp
  • 汽車

如果您有常數,請說: #define KM_PER_MINUTE 3 如果.h文件中的任何函數使用此常量,請將此#define放在.h文件中:

Inside Car.h:
#ifndef CAR_H
#define CAR_H
... 
#define KM_PER_MINUTE 3
...
int calculate_total_KM(int minute) 
{
    return minute * KM_PER_MINUTE;
}
...
#endif 

另一方面,如果僅在.cpp文件中使用此常量,請將此#define放在.cpp文件中:

Inside Car.cpp:
#define KM_PER_MINUTE 3
...
int calculate_total_KM(int minute) 
{
    return minute * KM_PER_MINUTE;
}
...

文檔中

#define指令將標識符定義為宏,這指示編譯器將所有后續出現的標識符替換為“替換列表”,可以選擇對其進行附加處理。 如果標識符已經定義為任何類型的宏,則除非定義相同,否則程序格式錯誤。

我想它完全可以回答您的問題。
不用說,您可以在.h文件中定義一個宏,然后在需要該宏的任何地方包括它。

如果將其放在#ifndef則沒關系,它將僅包含一次(第一次出現)。 如果您沒有,那么當源中定義的宏以及包含宏的標頭中時,您將收到已定義宏的警告。

順便說一句:第三名,您可以在生成文件或項目設置中聲明宏。

“在兩個文件中都定義宏(#define)”會導致重新定義錯誤或警告。 這不好。 它可能會導致程序編譯錯誤(好東西)或運行時錯誤(糟糕的事情)。

暫無
暫無

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

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