是否需要在#define中设置数据类型?

时间:2015-10-21 08:19:44

标签: c

我有一个问题。当我在c中创建#define VAR 5时,是否需要定义类型?喜欢:#define VAR (unit_8) 5

我想,当我制作这个C代码时会发生什么。

#define VAR 15000
void foo(uint_8);
void foo(uint_8 c) { c++; }
int main() {
  foo(VAR);
  return 0; 
}  

2 个答案:

答案 0 :(得分:5)

您无法在#define语句中声明变量。这些只是预处理器的语句,只是文本替换。

在你的情况下,

VAR不是变量,而是由预处理器处理的一种常量。

你可以做到

#define VAR 15000
uint_16 a = VAR;

但VAR本身绝对不是变量,而只是预处理器文本替换。在预处理器运行之后,编译器将上述代码视为;

uint_16 a = 15000;

如果您需要使用常量,可以执行以下操作:

const int VAR = 15000;

相反。

答案 1 :(得分:5)

,没有必要。宏做文本替换。他们不了解数据类型。

如果要使用类型定义常量,请使用Access-Control-Request-Method and Access-Control-Request-Headers

const T

否则,就像你一样,你可以在宏中强制转换常量:

const int var = 15000;

请注意,整数文字可能有不同的类型(#define VAR (unit_8) 15000 始终15000)。您可以通过附加int,例如ul等来调整文字的类型。

15000lu = unsigned long
16000u = unsigned int
15000 = int