問題タブ [compound-literals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ネストされた構造体/配列の初期化
別の構造の配列を含む構造があります。次のようになります。
グローバルスコープでそれらを初期化したいと思います。これらは、モジュールの説明として意図されています。私は c99 複合リテラルでそれをやろうとしましたが、コンパイラ (gcc) はそれを気に入りませんでした:
次のエラーが表示されます。
変更する必要がないので、必要な数の「const」を入れることができます。それをコンパイルする方法はありますか?
c - 複合リテラルで匿名共用体を割り当てることは (合法的に) 可能ですか?
私は構造体を持っています:
次のような複合リテラルを割り当てようとすると、
gcc は次のような警告を表示します。
あいまいな可能性のある型に値を代入するだけで、コンパイラが確信を持てないことは明らかです。ただし、より正確に指定しようとしても、次のようになります。
私は得る:
(union <union name>)
前に置くとうまくいくかもしれないと読んだことi:
があります。しかし、私は匿名の組合を持つことを好みます。それを行う方法はありますか?
c - 複合リテラルで使用されるキャストとポインター変数で行われるキャストの違いは?
次のコードを検討してください。
ここで複合リテラルがエラーを生成しないのはなぜですか?
c - C複合リテラル、配列へのポインタ
複合リテラルを変数に割り当てようとしていますが、機能しないようです。以下を参照してください。
gccでエラーが発生しました。
しかし、私がこれだけを書くと:
それなら大丈夫です
しかし、私が望むものではありません。
エラーが発生する理由がわかりません。配列のように初期化するか、charの配列のポインターで使用すると、問題ありません。以下を参照してください。
注最初の形式でエラーが発生した理由がわかりません。できません。または、複合リテラルである必要があるため、2番目の形式のように記述したくありません。コンパイラにとっての配列の大きさを言います。2番目のようなものが必要ですが、int値用です。
前もって感謝します。
c - 複合リテラルと関数のようなマクロ:gccまたはC標準のバグ?
C99には複合リテラルがあり、次のように関数に渡すことができます。
ただし、f
が関数ではなく関数のようなマクロである場合、プリプロセッサが1つの引数としてではなく、「(int[2]){ 1
」と「」の2つの引数として解析するため、gccはこれをバーフし2 }
ます。
これはgccまたはC標準のバグですか?後者の場合、それは関数のようなマクロのすべての透過的な使用をほぼ除外します。これは大きな欠陥のようです...
編集:例として、以下が適合プログラムフラグメントであることが期待されます。
ただしfgetc
、マクロとして実装できるため(引数を保護し、複数回評価しないようにする必要がありますが)、このコードは実際には正しくありません。それは私には驚きのようです。
c - 複合リテラルを配列ポインターに割り当てると、同じ場所と時間で期待される結果とゴミの両方が得られますか?
見よ(YMMV):
ポインタ演算を介して配列を出力すると、実際に1〜5の整数シーケンスを保持していることがわかりますが、indecesを介して表現された同じ配列と思われるものを再度出力すると、初期化されていないがらくたになります。なんで?
c - IFステートメントの複合リテラル
この小さなコードを試して、IFステートメントで複合リテラルを使用しました。
うまくいきませんでした。コンパイル時に次のメッセージが表示されました。
prac.c:15:16:エラー:バイナリへのオペランドが無効です==(「構造体時間」と「構造体時間」があります)
IFステートメントで複合リテラルを使用することは許可されていませんか、または構文が正しくありませんか?
iphone - CGRectMake のような関数を使用する理由
CGRectMake や CGPointMake などの関数が存在し、広く使用されている理由に興味があります。代わりに、次のことができます。
関数呼び出しがないので、確かにこれはより効率的です (私はあまり推測していませんが)。
また、次のように原点とサイズを設定できます。
および混合物として:
これを使用せず、Make 関数を優先する理由は何ですか?
c - このコードでは、複合リテラルはどのように機能しますか?
次のコードで2つの関数を記述しました。どちらも同じ出力を生成することを目的としています。しかし、g()
ループを持つ関数は、以下に示すように、私が期待していたものとは異なる出力を生成します。
出力:
呼び出されたときのアドレスp
が同じになるのはなぜですか?g()