【问题标题】:Cannot pass a #define integer as parameter of uint8_t / int type or as array index [duplicate]无法将#define 整数作为 uint8_t / int 类型的参数或数组索引传递
【发布时间】:2018-08-30 20:47:51
【问题描述】:

有一个奇怪的问题,基本上我不能使用 #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/包含“-I”/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/ simplestudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/kit/common/drivers" '-DEFM32ZG222F32=1'

链接器标志:

-g -gdwarf-2 -mcpu=cortex-m0plus -mthumb -T "${BuildArtifactFileBaseName}.ld" -Xlinker --gc-sections -Xlinker -Map="${BuildArtifactFileBaseName}.map" --specs =纳米规格

我问过我的老人谁是老手,他说这很奇怪。我同意,因为我从未遇到过以这种方式使用#defines 的问题,实际上它被视为约定。


我试图将数字括在一组括号中,即

#define LOC3 (3)

但这也行不通。

以前有人遇到过这个问题吗?

提前致谢, MM25

【问题讨论】:

  • #define LOC3 3;。删除;
  • #define 没有声明什么。它定义了一个预处理器宏。

标签: c embedded


【解决方案1】:
#define LOC3 3;

你需要删除 ; 否则你的函数调用看起来像

spi_Setup(USART1, 3; , true, receiveBuffer, transmitBuffer);

这不是有效的 C 语法。

#define LOC3 3

会起作用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多