Deklarasi pertama memberitahu compiler bahwa someArrayadalah setidaknya 100 elemen panjang. Ini dapat digunakan untuk optimisasi. Misalnya, itu juga berarti someArraytidak 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 someArrayelemen!) 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 ..)