我有一个问题。当我在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;
}
答案 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
,例如u
,l
等来调整文字的类型。
15000lu = unsigned long
16000u = unsigned int
15000 = int