“在#include指令的末尾额外令牌”我测试的解决方案我前一个问题的尝试:Use typedef within struct for naming and indexing text commands解决生成警告 -
不过,我想保持我的编译器警告无法比拟的。为此我使用静态代码分析工具,对于某些工具(例如:LINT),我可以在评论中使用标记手动排除某些规则和警告。
在第一/顶部回答的情况下,我试过了解决方案,但修改后的最终结构看起来像这样:
struct command commands[] =
{
#include "commands.inc",
{NULL, NULL}
};
这是这样我就可以知道,如果,在搜索过程中,我已经到达这个结构数组中最大的可寻址成员并且没有得到一个超出界限的条件。问题是我知道有一个编译器警告,“警告:#include指令结尾处的额外令牌”。有什么办法可以禁用这个警告吗?我喜欢这个解决方案,它非常适合我的需求。
最后,我更新了我的。公司文件是像这样:的
CMD(list),
CMD(quit),
CMD(start),
代替
CMD(list),
CMD(quit),
CMD(start)
然后我能够删除尾随逗号从我的宏定义和我的静态初始化代码。
我需要它有这样我就可以宣布由空的下一个元素。 – DevNull
@GirLovesTacos:然后将逗号移到下一行。以'#'开头的行代表预处理器,不会被编译器看到。 – wallyk
你真的不需要这个逗号,它应该用#define来生成,就像在你建议的SO链接中一样###define COMMAND(NAME){#NAME,CMD_ ## NAME},'... –