アカウント名:
パスワード:
C言語の場合、静的変数の初期値はコンパイル時に確定する必要があるので、リテラルでないものは初期値には指定できません。auto変数の場合は、初期値は実行時に設定されるので、変数でも関数でも指定できます。
マクロで初期値とする複合リテラルを宣言するのがいちばん素直な方法だと思います。マクロであればネストしてもかまいませんし。マクロ宣言で行末にバックスラッシュを書くことなどたいした問題ではないし、コード本文で初期値を正しく書けるのであれば、マクロ宣言でも正しく書けるはずです。マクロの展開結果が不安なら、cc -E で確認できます。
どうしてもマク
やはりCならマクロが良いのかもしれません。そんな気もしてきました。C++を使ってconstexprは思いつきませんでした。
gccはC++モードでもdesignated initializerが使えるのでしたっけ? (素直にC++にしないのはdesignated initializerが使いたいからだとサンプルコードから判断していました)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家
静的変数の初期値はリテラルのみ (スコア:1)
C言語の場合、静的変数の初期値はコンパイル時に確定する必要があるので、リテラルでないものは初期値には指定できません。
auto変数の場合は、初期値は実行時に設定されるので、変数でも関数でも指定できます。
マクロで初期値とする複合リテラルを宣言するのがいちばん素直な方法だと思います。
マクロであればネストしてもかまいませんし。
マクロ宣言で行末にバックスラッシュを書くことなどたいした問題ではないし、コード本文で初期値を正しく書けるのであれば、マクロ宣言でも正しく書けるはずです。
マクロの展開結果が不安なら、cc -E で確認できます。
どうしてもマク
Re:静的変数の初期値はリテラルのみ (スコア:2)
やはりCならマクロが良いのかもしれません。そんな気もしてきました。
C++を使ってconstexprは思いつきませんでした。
Re: (スコア:0)
gccはC++モードでもdesignated initializerが使えるのでしたっけ? (素直にC++にしないのはdesignated initializerが使いたいからだとサンプルコードから判断していました)