c - 不能将 #define 整数作为 uint8_t / int 类型的参数或数组索引传递
问题描述
有一个奇怪的问题,基本上我不能使用#define指令来声明一个整数,然后将该整数用作函数参数或索引数组。
使以下示例起作用的唯一方法是将它们声明为
const uint8_t LOC3 = 3;
和
const uint8_t PORTA = 0;
这是定义:
#define LOC3 3;
这是函数原型:
void spi_Setup(USART_TypeDef *spi,
uint8_t location, <-- this parameter here
bool master,
char* rxBuffer,
char* txBuffer);
即使将参数声明为int类型,它仍然不允许我像这样调用函数:
spi_Setup(USART1, LOC3, true, receiveBuffer, transmitBuffer);
这同样适用于数组索引:
#define PORTA 0;
这是调用结构:
GPIO->P[PORTA].DOUTCLR = 1 << 1;
如前所述,这些示例都不起作用,
编译器设置:
方言:C99 编译器:GNU ARM 嵌入式工具链
编译器标志:
-g -gdwarf-2 -mcpu=cortex-m0plus -mthumb -std=c99 '-DDEBUG=1' '-DEFM32ZG222F32=1' -I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/ developer/sdks/gecko_sdk_suite/v2.3//platform/CMSIS/Include"-I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/ kit/EFM32ZG_STK3200/config"-I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/kit/common/bsp"-I"/home /access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//platform/Device/SiliconLabs/EFM32ZG/Include“-I”/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/kit/common/drivers" -O0 -Wall -c -fmessage-length=0 -mno -sched-prolog -fno-builtin -ffunction-sections -fdata-sections
汇编标志:
-g -gdwarf-2 -mcpu=cortex-m0plus -mthumb -c -x assembler-with-cpp -I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2 .3//platform/CMSIS/Include"-I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/kit/EFM32ZG_STK3200/config"- I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/kit/common/bsp"-I"/home/access/Downloads/simplicitystudio/ pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//platform/Device/SiliconLabs/EFM32ZG/Include"-I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer /sdks/gecko_sdk_suite/v2.3//硬件/套件/通用/驱动程序"'-DEFM32ZG222F32=1'
链接器标志:
-g -gdwarf-2 -mcpu=cortex-m0plus -mthumb -T "${BuildArtifactFileBaseName}.ld" -Xlinker --gc-sections -Xlinker -Map="${BuildArtifactFileBaseName}.map" --specs=nano。眼镜
我问过我的老人谁是老手,他说这很奇怪。我同意,因为我从来没有以这种方式使用#defines,实际上它被认为是惯例。
我试图将数字括在一组括号中,即
#define LOC3 (3)
然而,这也行不通。
以前有人遇到过这个问题吗?
提前致谢,MM25
解决方案
#define LOC3 3;
您需要删除,;
否则您的函数调用看起来像
spi_Setup(USART1, 3; , true, receiveBuffer, transmitBuffer);
这不是有效的 C 语法。
#define LOC3 3
将工作。
推荐阅读
- javascript - Javascript 禁止访问直接在浏览器中键入的页面
- ruby-on-rails - 在 Rails 5 中发布请求
- r - 将列表列表写入 R/Shiny 中的文件
- java - JNI DETECTED ERROR IN APPLICATION(使用多线程在 android 中操作位图时出错)
- c# - 在 C# 中,如何使用 POST 方法将数据从 SQL Server 发送到 HTTP 请求?
- javascript - 茉莉花与帮手
- python - 文件 ”
",第 1 行,在 NameError: 名称“”未在 ATOM 中定义 - linux - Aerospike 进程占用大量内存
- ocaml - BFS 是否缺少参数?
- javascript - 这是什么意思?