Mic*_*ell -1 c embedded c-preprocessor
我正在使用C语言商业RTOS的套接字库来开发嵌入式项目.出于保密原因,我对某些周围的细节会非常模糊,但只知道有一个完整的产品和RTOS堆栈.
在我正在研究的部分中,我有一个相当大但很简单的switch语句,它检查一个宏值并设置另一个宏值.案例值是RTOS标头中的套接字选项标志.当我用这个switch语句编译文件时,我得到一个错误,说"不止一次定义了case case",指的是其中五个案例.
以下是一些让这个神秘的细节:
#ifndef HEADER以避免多个包含.我是由一位资深开发人员在这里经营的,他和我一样神秘.有没有人知道可能导致这种情况的C解释的怪癖,或者任何地雷可能被忽视了?
谢谢!
该错误意味着宏被替换的值对于两个或更多宏是相同的,即使宏本身是不同的.
以下是重现此错误的简单方法:
#define ONE 42
#define TWO 42
int main(int argc, char* argv[]) {
int k = atoi(argv[1]);
switch (k) {
case ONE:
printf("ONE\n");
break;
case TWO:
printf("TWO\n");
break;
default:
printf("NONE\n");
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
尽管宏被称为ONE并且TWO,它们的值都是42,这会导致错误.
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |