我们是否应该在.h和.cpp文件中都包含一个宏(#define)
Should we include a macro(#define) in both .h & .cpp files
如果我在两个文件中都使用它们。使用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('会导致重定义错误或警告。不好。它可能会导致程序编译错误(好事(或运行时错误(可怕的事(。
相关文章:
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 当我在结构中包含多个数组时,我的程序会跳过一堆代码
- 一次包含一个 #include 表达式的多个头文件?
- 使用 #pragma 一次,#ifndef 在同一文件中包含保护
- 返回一个数组,该数组包含数组中的数量,该数组数量较小或等于给定数组中的元素
- C++:在包含的头文件 (Arduino) 中使用 #define 常量
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- C++ - 在类中包含不是类对象属性的变量是否是一种不好的做法
- 至少包含一次字符 X 的 S 的不同子字符串的数量
- 寻找一种在运行时检测 valgrind/memcheck 的方法,而无需包含 valgrind 标头
- C++包含一组对象的类
- 我想在C++项目中包含一种脚本语言.Lua vs Bison/Yacc
- 为什么我可以在多个包含const int的cpp文件中包含一个头文件,而不会出现编译器错误
- 有没有办法将源代码格式化为每行只包含一条语句
- 双链接列表总是只包含一条记录
- 页眉应包含一次
- 头文件在整个程序中仅包含一次