警告:ISO C++不允许C99指定的初始化器,我应该用什么来代替?

iswrvxsc  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(268)

我将把问题简化得更具体一些。用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,但我确实使用了它。有什么方法可以解决这个问题吗?它与上述警告有关吗?

shstlldc

shstlldc1#

只是不使用指定的初始化数组:

static const char *valid_args[] = {"--help","-h"};

这两个元素的索引分别是01,与指定的初始化函数相同,因为ARG_HELP_LONGARG_HELP_SHORT的值分别是01
C从C20开始就有指定的初始化函数,不过(从cppreference开始):
注意:乱序指定初始化、嵌套指定初始化、指定初始化器和正则初始化器的混合以及数组的指定初始化在C编程语言中都受支持,但在C++中不允许。

相关问题