C 如何在编译时阻止宏函数多次使用枚举元素

C 如何在编译时阻止宏函数多次使用枚举元素,c,macros,compile-time,C,Macros,Compile Time,请在下面找到示例代码 typedef enum { ID_001 = 1, ID_002 = 2, ID_003 = 3, }ENM_t; #define ERR(en) {printf("ID = %d\n", en);} int main() { ERR(ID_001); ERR(ID_003); return 0; } 如果我多次将同一个枚举元素传递给宏函数“ERR”,是否有办法给出编译时错误?。如果我使用的话,上面

请在下面找到示例代码

typedef enum {
    ID_001 = 1,
    ID_002 = 2,
    ID_003 = 3,
}ENM_t;
#define ERR(en) {printf("ID = %d\n", en);}
int main()
{  
    ERR(ID_001);
    ERR(ID_003);
    return 0;
}
如果我多次将同一个枚举元素传递给宏函数“ERR”,是否有办法给出编译时错误?。如果我使用
的话,上面的程序应该编译没有任何错误 错误(ID_001); 错误(ID_001);
然后它会给出一个编译时错误。

如果没有自己的预处理器来检查这个特定的情况,那么不,这是不可能的。你为什么想要这个?您需要解决的实际问题是什么?我有大量的代码和许多错误调用。要通过的ID对于整个代码应该只有一个。单元测试、代码审查,以及可能通过自定义检查器程序进行的自动检查是可以做到这一点的方法。没有办法从本质上有效的代码中得到编译器错误。在整个项目中进行文本搜索应该是程序员最常用的工具之一。只需在枚举中一次搜索一个项目?您可以在
ID\uu
上执行
grep
,然后对输出进行排序。任何重复使用都可以用你的眼睛找到。