我们应该在.h和amp;中包含一个宏(#define)吗? .cpp文件

时间:2016-01-05 23:21:22

标签: c++ preprocessor-directive

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

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

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

  • Car.cpp
  • Car.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;
}
...

答案 2 :(得分:0)

如果你把它放在#ifndef中那么无关紧要,它只会被包含一次(第一次出现)。我没有,那么当源中定义的宏以及包含宏的头部时,您将收到已定义宏的警告。

BTW:还有第三名,您可以在makefile或项目设置中声明宏。

答案 3 :(得分:0)

来自documentation

  

#define指令将标识符定义为宏,指示编译器用替换列表替换所有连续出现的标识符,可以选择另外处理。 如果标识符已被定义为任何类型的宏,则除非定义相同,否则程序格式不正确。

我想这完全回答了你的问题 不言而喻,您可以在.h文件中定义宏,然后将其包含在您需要该宏的任何位置。

答案 4 :(得分:0)

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

相关问题