Cara pertama paling mudah ( tidak perlu banyak mengetik ), dan dijamin berhasil, semua anggota akan disetel ke 0
[Ref 1] .
Yang kedua lebih mudah dibaca.
Pilihannya tergantung pada preferensi pengguna atau yang diamanatkan standar pengkodean Anda.
[Ref 1] Referensi C99 Standar 6.7.8.21:
Jika ada lebih sedikit penginisialisasi dalam daftar yang diapit kurung kurawal daripada jumlah elemen atau anggota agregat, atau lebih sedikit karakter dalam string literal yang digunakan untuk menginisialisasi larik dengan ukuran yang diketahui daripada jumlah elemen dalam larik, sisa agregat harus diinisialisasi secara implisit sama dengan objek yang memiliki durasi penyimpanan statis.
Good Read:
C dan C ++: Inisialisasi parsial dari struktur otomatis
= {};
Namun saya tidak yakin apakah ini valid.foo = {0}
artinya. Jika saya melihatfoo = ZERO_FULL
, saya harus grep untuk definisi ZERO_FULL.Jika datanya adalah variabel statis atau global, secara default diisi nol, jadi deklarasikan saja
myStruct _m;
Jika datanya adalah variabel lokal atau zona yang dialokasikan heap, hapus dengan
memset
seperti:Kompiler saat ini (misalnya versi terbaru
gcc
) mengoptimalkannya dengan cukup baik dalam praktiknya. Ini hanya berfungsi jika semua nilai nol (termasuk penunjuk nol dan titik mengambang nol) direpresentasikan sebagai semua bit nol, yang benar pada semua platform yang saya ketahui (tetapi standar C mengizinkan implementasi yang salah; saya tidak tahu penerapan seperti itu) .Anda mungkin dapat membuat kode
myStruct m = {};
ataumyStruct m = {0};
(meskipun anggota pertama darimyStruct
bukan skalar).Perasaan saya adalah bahwa menggunakan
memset
untuk struktur lokal adalah yang terbaik, dan ini menyampaikan fakta yang lebih baik bahwa pada waktu proses, sesuatu harus dilakukan (sementara biasanya, data global dan statis dapat dipahami sebagai diinisialisasi pada waktu kompilasi, tanpa biaya apa pun pada waktu proses) .sumber
0
menjadi sama dengan menginisialisasi semua anggota struct dengan0
. Pada banyak platform, ini benar, tetapi tidak secara universal.{}
tersebut bukan C yang valid tetapi hanya tersedia di C ++.NULL
penunjuk yang tidak semuanya0
bit: c-faq.com/null/machexamp.html . Dan kemudian ada kemungkinan platform tidak menggunakan IEEE 754 untuk mewakili nilai floating point, tetapi menggunakan beberapa representasi lain yang tidak memiliki semua nilai0
bit0.0
- tetapi saya tidak tahu platform seperti itu.Lihat §6.7.9 Inisialisasi:
Jadi, ya keduanya berhasil. Perhatikan bahwa di C99 cara baru inisialisasi, yang disebut inisialisasi yang ditunjuk dapat digunakan juga:
sumber