我正在使用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中,这些定义会引发错误。 当我使用#defines而不是像
这样的常量时#define X (5+3);
#define Y (((X) + 10) * 5)
#define Z ((((Y) + 8) + 0xfff) & ~0xfff)
C编译器抱怨“Y”和“Z”的定义。
有人可以帮我找到解决方案。
答案 0 :(得分:5)
您需要从#define X行
中删除分号#define X (5+3)
#define Y (((X) + 10) * 5)
#define Z ((((Y) + 8) + 0xfff) & ~0xfff)
答案 1 :(得分:3)
#define X (5+3);
错了,需要#define X (5+3)
(没有';')
你也要注意使用静态const和#define之间的区别:在静态const中,值实际是在#define中计算的,它是预处理器命令,所以
#define n very_heavy_calc()
...
n*n;
将导致两次评估very_heavy_calc()
答案 2 :(得分:1)
另一种选择是使用枚举:
enum {
X = 5 + 3,
Y = (X + 10) * 5,
Z = ((Y + 8) + 0xfff) & ~0xfff
};