这是 SIMULINK 嵌入式编码器 C. 文件输出中始终使用的行:
#define MAX_int8_T ((int8_T)(127))
它也使用这条线:
typedef signed char int8_T;
我知道它定义了一个名为 (int8_T) 的新变量 (signed char),用于存储来自 -128 到 127 = 256 数字,但我不明白第一行代码,我可以将宏定义为 2 个值吗?我总是定义宏只携带一个值,如下所示:
#define x 100
我将 x 固定为始终等于 100,那么 SIMULINK 是否将 MAX_int8_T 定义为等于 (int8_T) 或 (127)
或者它做了什么?
typedef 有符号的 char int8_T;
#定义 MAX_int8_T ((int8_T)(127))
我理解它定义了一个名为 (int8_T) 的新变量为 (signed char)
你的理解是错误的。该行定义了 signed char
的
类型别名。它允许您实例化
int8_T
类型的变量,即 signed char
:
int8_T small_integer = MAX_int8_T ;
我可以将宏定义为 2 个值吗? 不,事实并非如此。宏只是文本替换。因此,预处理器(执行文本替换)运行后的上述实例化对于编译器来说看起来像:
int8_T small_integer = ((int8_T)(127)) ;
这里发生的是,文字常量
127
本身具有类型 int
。 (int8_T)
是一种类型转换,用于将其显式转换为 int8_T
。如果没有类型别名,则相当于:
signed char small_integer = ((signed_char)(127)) ;
Simulink 有点奇怪,在
uint8_t small_integer = SCHAR_MAX ;