在C中定义常量
Defining constants in C
我用c++工作了很长时间,现在我在做一个C项目。
我正在把一个c++程序转换成C。
我对程序中使用的常量有困难。
在c++代码中,我们定义了像
static const int X = 5 + 3;
static const int Y = (X + 10) * 5
static const int Z = ((Y + 8) + 0xfff) & ~0xfff
在C中,这些定义抛出错误。当我使用#define代替像
这样的常量时#define X (5+3);
#define Y (((X) + 10) * 5)
#define Z ((((Y) + 8) + 0xfff) & ~0xfff)
C编译器报错了"Y"answers"Z"的定义。
谁能帮我找到一个解决这个问题的方法
你需要从#define X line中去掉分号
#define X (5+3)
#define Y (((X) + 10) * 5)
#define Z ((((Y) + 8) + 0xfff) & ~0xfff)
#define X (5+3);
是错误的,需要是#define X (5+3)
(不带';')
也要注意使用静态const和#define之间的区别:在静态const中,值实际上是求值的,在#define中,它是预处理命令,所以
#define n very_heavy_calc()
...
n*n;
将导致计算两次very_heavy_calc()
另一个选择是使用enum:
enum {
X = 5 + 3,
Y = (X + 10) * 5,
Z = ((Y + 8) + 0xfff) & ~0xfff
};
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 我可以在运行时重新定义在 OpenCascade/OCCT 标头中定义的 c++ 静态常量吗?
- 在定义的函数中使用常量时出错
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- C++ 确保子类为常量提供自定义值
- 用矩阵将函数中的整数值替换定义的常量
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 将字符串文本常量定义为 char const* 和 wchar const*
- 为什么不建议使用宏符号常量定义一个固定长度的数组呢
- 我可以使用常量定义数组的长度,那么为什么 int d[b] 不起作用呢?
- 调用构造函数与将内联常量定义为默认参数
- 是否允许在常量定义的对象上丢弃 const 只要它没有实际被修改?
- 多个文件中的常量定义
- 常量定义和模板
- 如何在另一个命名空间中使用常量定义的外部
- 全局常量定义的顺序
- 将常量定义为函数会导致标头=坏主意
- 是一个宏,其变量总是用变量或常量定义