[英]warning: ISO C++ does not allow C99 designated initializers, what should i use instead?
我會將問題簡化為更具體。 使用 g++ 和 -pedantic 參數編譯我的 c++ 程序,如下所示:
g++ -Wall -pedantic 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,但我確實使用了它。 有什么辦法可以解決這個問題嗎? 它與上述警告有關嗎?
只是不使用數組的指定初始化:
static const char *valid_args[] = {"--help","-h"};
這兩個元素的索引分別為0
和1
。 與指定初始化器相同,因為ARG_HELP_LONG
和ARG_HELP_SHORT
的值分別為0
和1
。
C++ 從 C++20 開始就指定了初始值設定項,不過(來自cppreference ):
注意:arrays的亂序指定初始化,嵌套指定初始化,混合指定初始化和常規初始化,以及arrays的指定初始化在C編程語言中都是支持的,但在C++中是不允許的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.