#define表示unsigned long

时间:2009-10-31 03:42:24

标签: c macros c-preprocessor

我正在尝试使用#define指令将所有“ulong”更改为“unsigned long”。 这是一个例子:

#define ulong unsigned long
ulong idCounter = 0;

可悲的是,我认为它最终会用“unsigned”替换ulong,而不是“unsigned long”。我试过“#define ulong(unsigned long)”,但这也不起作用。

3 个答案:

答案 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,就像他们说的那样。