我正在测试我在上一个问题中尝试过的解决方案:Use typedef within struct for naming and indexing text commands
但是,我想将编译器警告保留为无。我为此目的使用静态代码分析工具,对于某些工具(即:LINT),我可以在评论中使用标记手动排除每行的某些规则和警告。
在第一个/最佳答案的情况下,我尝试了这个解决方案,但修改了最终结构,如下所示:
struct command commands[] =
{
#include "commands.inc",
{NULL, NULL}
};
这样我就可以知道,在搜索过程中,我是否已经到达了这个struct-of-struct中最大的可寻址成员,并且没有得到越界条件。问题是我知道有一个编译器警告,“警告:#include指令末尾的额外令牌”。有没有办法禁用此警告?我喜欢这个解决方案,它非常适合我的需求。
最后,我将.inc文件更新为:
CMD(list),
CMD(quit),
CMD(start),
而不是
CMD(list),
CMD(quit),
CMD(start)
然后,我能够从宏定义和静态初始化代码中删除尾随逗号。
答案 0 :(得分:13)
您应该删除#include
指令末尾的逗号。它不应该存在。
答案 1 :(得分:1)
可能对尾随的逗号感到不满。尝试:
struct command commands[] =
{
#include "commands.inc"
, {NULL, NULL}
};