C 查询中的嵌入式编码器输出

问题描述 投票:0回答:1

这是 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))

c matlab embedded simulink
1个回答
0
投票

我理解它定义了一个名为 (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 ;
© www.soinside.com 2019 - 2024. All rights reserved.