我正在尝试使用#define
指令将所有“ulong”更改为“unsigned long”。
这是一个例子:
#define ulong unsigned long
ulong idCounter = 0;
可悲的是,我认为它最终会用“unsigned”替换ulong,而不是“unsigned long”。我试过“#define ulong(unsigned long)”,但这也不起作用。
答案 0 :(得分:15)
更好地使用typedef。您的宏可能失败的原因是 - 它在某些地方可能在语法上无效。考虑:
double x = calc();
ulong v = ulong(x);
在这种情况下,你得到
unsigned long v = unsigned long(x);
这是无效的,因为使用的强制转换表单与您命名类型的方式不兼容(它必须包含一个更简单的表单,如单个单词)。使用typedef:
typedef unsigned long ulong;
答案 1 :(得分:9)
为什么不使用typedef?
typedef unsigned long ulong;
答案 2 :(得分:2)
你的宏工作正常:
cpp ulong.c
给出
# 1 "ulong.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "ulong.c"
unsigned long idCounter = 0;
我最初假设您已经有一个名为ulong
的typedef,并试图用预处理器覆盖它,但其他人对它有不同的看法。如果你真的想要ulong
,你应该使用typedef,就像他们说的那样。