Deklarasi pertama memberitahu compiler bahwa someArray
adalah setidaknya 100 elemen panjang. Ini dapat digunakan untuk optimisasi. Misalnya, itu juga berarti someArray
tidak pernah NULL
.
Perhatikan bahwa Standar C tidak memerlukan kompiler untuk mendiagnosis ketika panggilan ke fungsi tidak memenuhi persyaratan ini (yaitu, itu adalah perilaku terdefinisi diam).
Deklarasi kedua hanya menyatakan someArray
(bukan someArray
elemen!) Sebagai const, yaitu, Anda tidak dapat menulis someArray=someOtherArray
. Itu sama seperti jika parameternya char * const someArray
.
Sintaks ini hanya dapat digunakan di bagian terdalam []
dari deklarator array dalam daftar parameter fungsi; itu tidak masuk akal dalam konteks lain.
Teks standar, yang mencakup kedua kasus di atas, ada di C11 6.7.6.3/7 (adalah 6.7.5.3/7 di C99):
Deklarasi parameter sebagai '' array tipe '' harus disesuaikan dengan '' pointer berkualitas untuk mengetik '', di mana kualifikasi tipe (jika ada) adalah yang ditentukan dalam [
dan ]
dari derivasi tipe array. Jika kata kunci statis juga muncul di dalam [
dan ]
dari derivasi tipe array, maka untuk setiap panggilan ke fungsi, nilai argumen aktual yang sesuai harus menyediakan akses ke elemen pertama dari array dengan setidaknya sebanyak elemen yang ditentukan oleh ekspresi ukuran.
int foo(struct bar [static 1]);
daripadaint foo(struct bar *);
sebagai tanda tangan untuk fungsi yang tidak menerima pointer NULL. (Saya tahu gcc memiliki sintaks tidak standar alternatif untuk menandai fungsi-fungsi seperti itu sehingga kompiler dapat memberikan peringatan ..)