タグ付けされた質問 「c11」

7
「sizeof(a?true:false)」が4バイトの出力を提供するのはなぜですか?
sizeof三項演算子を使用した演算子に関する小さなコードがあります。 #include <stdio.h> #include <stdbool.h> int main() { bool a = true; printf("%zu\n", sizeof(bool)); // Ok printf("%zu\n", sizeof(a)); // Ok printf("%zu\n", sizeof(a ? true : false)); // Why 4? return 0; } 出力(GCC): 1 1 4 // Why 4? しかし、ここで、 printf("%zu\n", sizeof(a ? true : false)); // Why 4? 三項演算子はbooleanタイプを返し、sizeof …

7
なぜauto a = 1; Cでコンパイルしますか?
コード: int main(void) { auto a=1; return 0; } ファイルに.c拡張子が付いている場合、MS Visual Studio 2012コンパイラによってエラーなしでコンパイルされます。私は、.c拡張子を使用する場合、コンパイルはC ++ではなくC構文に従う必要があると常に考えていました。さらに、私が知る限り、型なしのautoは、C ++ 11以降のC ++でのみ許可されています。これは、型が初期化子から推定されることを意味します。 それは私のコンパイラがCに固執していないことを意味しますか、それともコードは実際にはC言語で正しいのですか?
125 c  auto  c11 


1
Cでのオブジェクトのオーバーラップのセマンティクスは何ですか?
次の構造体について考えてみましょう。 struct s { int a, b; }; 典型的には1、この構造体は、サイズ8と位置合わせ4を有するであろう。 2つのstruct sオブジェクトを作成し(より正確には、2つのオブジェクトを割り当てられたストレージに書き込みます)、2番目のオブジェクトが最初のオブジェクトと重なる場合はどうなりますか? char *storage = malloc(3 * sizeof(struct s)); struct s *o1 = (struct s *)storage; // offset 0 struct s *o2 = (struct s *)(storage + alignof(struct s)); // offset 4 // now, o2 points half way into o1 *o1 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.