将单个字符作为定义传递给gcc

将单个字符作为定义传递给gcc,gcc,compilation,Gcc,Compilation,我有一个.c版文件,其中包含以下行: const uint8_t ID_SoftwareId[] = { 'A', 'B', '0', '1', '0', '\0'}; 我想通过定义将A和B传递到此文件。 我很累,但我通常会收到来自gcc的太多初始化者的警告 有什么想法吗?您是否尝试过: const uint8_t ID_SoftwareId[] = { DEFA, 'B', '0', '1', '0', '\0'}; 然后: 工作表单TM.概念验证: #define TOKENIZ

我有一个.c版文件,其中包含以下行:

const uint8_t ID_SoftwareId[]   = { 'A', 'B', '0', '1', '0', '\0'};
我想通过定义将
A
B
传递到此文件。 我很累,但我通常会收到来自gcc的
太多初始化者的警告

有什么想法吗?

您是否尝试过:

const uint8_t ID_SoftwareId[]   = { DEFA, 'B', '0', '1', '0', '\0'};
然后:

工作表单TM.

概念验证:

#define TOKENIZE(x) #x
#define SINGLECHAR(x) (*(TOKENIZE(x)))

int main()
{
    char c = SINGLECHAR(DEFINITION);
    return 0;
}
编译并运行:

cpp -DDEFINTION=Q test.c
输出

# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"



int main()
{
 char c = (*("Q"));
 return 0;
}
#1“test.c”
# 1 ""
# 1 ""
#1“测试c”
int main()
{
字符c=(*(“Q”);
返回0;
}

这是一个没有sdtlib的嵌入式应用程序,因此这不是一个选项。好的,我对它进行了编辑,以便更清楚地说明我的解决方案(当然)只使用预处理器(cpp)
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"



int main()
{
 char c = (*("Q"));
 return 0;
}