次のように私は、明示的に識別変数を使用して、リストの構文を好む:
counter_t counter = {.hour = 10, .min = 30, .sec = 47};
または例えば、インラインを返す:
return (struct counter_t){.hour = 10, .min = 30, .sec = 47};
私は1つのシナリオを想像することができます変数が宣言された順序を変更します。変数を明示的に指定しないと、変数の順序を修正するためにすべてのコードを実行する必要があります。このように、私が
余談が思うよりクリーンで読みやすいです:
@AshleyDuncanと@MMプットとして、この機能はC99 https://stackoverflow.com/a/12122261/2770195後にISO C++から削除されましたが、サポートされていますgnuのC + +で。
ですから、うまくこれを行うことができますが:
# need an example. I was unable to find. Even clang++ supports it. If you know
# one, please suggest an edit
すると、あなたがサポートしているC++コンパイラでコンパイルする必要がある場合:あなたは上記の例をしようとした場合
g++ -std=gnu++11 main.cpp -o main
これは、エラーがスローされますこのgnu拡張を認識しないISO C++ 11以降では、単純なコンストラクタを持つクラスを使用する必要があります。
// backup workaround
// not cool
class gnuFTW {
public:
int hour;
int min;
int sec;
gnuFTW(int hour, int min, int sec) {
this->hour = hour;
this->min = min;
this->sec = sec;
}
};
int main(int argc, const char * argv[]) {
gnuFTW counter = gnuFTW(10,30,47);
cout << counter.hour << endl;
return 0;
}
それはうまくいくはずです。 –
'counter_t counter = {10,30,47}'と同じ行で宣言をしても、この代入の前に宣言が行われていないとうまくいくようです。 – mindthief
@Oli:それはなぜ機能するのですか?書かれているように、それは割り当てであり、初期化ではありません。 – sth