我将把问题简化得更具体一些。用g和-pedantic参数编译我的c程序,如下所示:
g++ -墙-学究式main.cpp
显示以下警告:
警告:ISO C++不允许C99指定的初始设定式[-Wpedantic]
这就是我正在努力实现的:
typedef enum {
ARG_HELP_LONG,
ARG_HELP_SHORT,
} arg_t;
static const char *valid_args[] = {[ARG_HELP_LONG] = "--help",
[ARG_HELP_SHORT] = "-h",
}
这样我就可以把它和别的东西比较:
if (strcmp(argv[i], valid_args[ARG_HELP_LONG]) == 0 || strcmp(argv[i], valid_args[ARG_HELP_SHORT]) == 0) {
do something..
}
我应该用什么来代替呢?
我还收到一个警告,告诉我没有使用valid_args,但我确实使用了它。有什么方法可以解决这个问题吗?它与上述警告有关吗?
1条答案
按热度按时间shstlldc1#
只是不使用指定的初始化数组:
这两个元素的索引分别是
0
和1
,与指定的初始化函数相同,因为ARG_HELP_LONG
和ARG_HELP_SHORT
的值分别是0
和1
。C从C20开始就有指定的初始化函数,不过(从cppreference开始):
注意:乱序指定初始化、嵌套指定初始化、指定初始化器和正则初始化器的混合以及数组的指定初始化在C编程语言中都受支持,但在C++中不允许。