我们是否应该在.h和.cpp文件中都包含一个宏(#define)

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

本文关键字:包含一 #define 文件 是否 cpp 我们      更新时间:2023-10-16

如果我在两个文件中都使用它们。使用C ++中的术语"宏",它只是在预编译阶段发生的替换机制(对c ++结构一无所知(。

这是我应该在两个文件中定义宏(#define(的原因,还是不需要这样做,或者我错过了任何东西。?

在 .h 文件中定义宏,然后在.cpp文件中包含该 .h 文件就足够了。

首先假设一个简单的案例。您有使用 .h 文件的.cpp文件:

  • 车.cpp
  • 车.h

如果你有一个常量,说:#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那么没关系,它只会被包含一次(第一次出现(。如果你没有,那么当源中定义的宏以及包含宏的标题时,您将收到已定义的宏的警告。

顺便说一句:还有第三个地方,您可以在 makefile 或项目设置中声明宏。

'在两个文件中定义宏(#define('会导致重定义错误或警告。不好。它可能会导致程序编译错误(好事(或运行时错误(可怕的事(。