申し訳ありませんが、私は何奇数使用
...コアオーディオの本を読んで休暇にだし、私のCまたは私とのObjective Cの本を持っていませんこの変数定義で中括弧は何をしていますか? C99標準に従って0
にrecorder
構造のすべてのメンバーを初期化する
MyRecorder recorder = {0};
申し訳ありませんが、私は何奇数使用
...コアオーディオの本を読んで休暇にだし、私のCまたは私とのObjective Cの本を持っていませんこの変数定義で中括弧は何をしていますか? C99標準に従って0
にrecorder
構造のすべてのメンバーを初期化する
MyRecorder recorder = {0};
。
あなたが想像することができます実はこれもdouble
、int
のような他のすべてのデータ型で動作し、ポインタ、配列、ネストされた構造、...、すべてのもの(これを指摘するためにPMGのおかげ!)
UPDATE:集約の要素またはメンバーがあるよりも、中括弧で囲まれたリスト で少ない初期化子がある場合
[6.7.8.21]、[:上記のリンク先のウェブサイトから抽出された引用、C99の最終案を引用...]残りの部分はです集合体は、 が静的記憶期間を持つオブジェクトと暗黙的に同じに初期化される。
その。 0
ビットで構造体のすべてのビットを初期化するように見えるかもしれません。しかし、それはすべてのコンパイラでは当てはまりません。
これは出力され
#include<stdio.h>
struct s {
int i;
unsigned long l;
double d;
};
int main(){
struct s es = {0};
printf("%d\n", es.i);
printf("%lu\n", es.l);
printf("%f\n", es.d);
return 0;
}
、このコード例を参照してください。
$ ./a.out
0
0
0.000000
"レコーダー構造のすべてのメンバーを0に初期化しています。" C99規格が適用されています。 "実際には、構造体のすべてのビットを0ビットで初期化します。"実際のところ、従来のアーキテクチャでのみ真実であり、C99標準は数回指摘しているが、それは真実であるとは言えず、標準準拠のコンパイラ/ターゲットアーキテクチャはそれを真実にする必要はない。 –
@Complicatedseebioありがとう、答えを更新しました。 –
an initialization of a structureです。 MyRecorder
はstruct
、このsets every member to their respective representation of zero(整数の0
、ポインタなどのためNULL
)であると仮定すると
もスカラーである可能性があります: 'MyRecorder recorder = {0};' MyRecorder'は 'int'のエイリアスで、例えばCで有効です。 – ouah
@ouah' struct 'の名前から判断して、それは 'int'または実際には構造体/共用体以外の何かであるとは考えられません。 – dasblinkenlight
MyRecorder
は、次のいずれかの可能性があり、あなたは実際に、それは最初だけで構造体のすべての要素を、initliazeいないゼロ
typedef struct _MyRecorder1 {
int i;
int j;
int k;
}MyRecorder1;
typedef int MyRecorder2[3];
とそのすべての要素を初期化しようとしています1。しかし、他は自動的に0で初期化されます。これはCの標準が要求するものなのでです。
次のように入力した場合: MyRecorder recorder = {3};
***最初の要素は3であり、そして他のものは、私は `{0} '、***ユニバーサルゼロイニシャライザを呼び出したい0
ことワイル。必要に応じて、あらゆるタイプのために再帰的に機能します。構造体へのポインタ、ポインタの配列を持つ構造体、... – pmg
pmg:post that that an answer! –
@pmg - 答えとしてあなたのコメントを投稿しなかったのはなぜですか? – vikingosegundo