簡體   English   中英

警告:ISO C++ 不允許 C99 指定的初始值設定項,我應該改用什么?

[英]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"};

這兩個元素的索引分別為01 與指定初始化器相同,因為ARG_HELP_LONGARG_HELP_SHORT的值分別為01

C++ 從 C++20 開始就指定了初始值設定項,不過(來自cppreference ):

注意:arrays的亂序指定初始化,嵌套指定初始化,混合指定初始化和常規初始化,以及arrays的指定初始化在C編程語言中都是支持的,但在C++中是不允許的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM