Bagikan melalui


Gambaran Umum Deklarasi

"Deklarasi" menentukan interpretasi dan atribut sekumpulan pengidentifikasi. Deklarasi yang juga menyebabkan penyimpanan dicadangkan untuk objek atau fungsi yang dinamai oleh pengidentifikasi disebut "definisi." Deklarasi C untuk variabel, fungsi, dan jenis memiliki sintaksis ini:

Sintaks

declaration:
declaration-specifiersattribute-seqopt opt init-declarator-list ;

/* attribute-seqopt khusus untuk Microsoft */

declaration-specifiers:
storage-class-specifierdeclaration-specifiersMemilih
type-specifierdeclaration-specifiersMemilih
type-qualifierdeclaration-specifiersMemilih

init-declarator-list:
init-declarator
init-declarator-list , init-declarator

init-declarator:
declarator
declarator = initializer

Catatan

Sintaksis untuk declaration ini tidak diulang di bagian berikut. Sintaksis di bagian berikut biasanya dimulai dengan nonterminal declarator.

Deklarasi dalam init-declarator-list berisi pengidentifikasi yang diberi nama; init adalah singkatan untuk penginisialisasi. init-declarator-list adalah urutan deklarator yang dipisahkan koma, yang masing-masing dapat memiliki informasi jenis tambahan, atau penginisialisasi, atau keduanya. declarator berisi pengidentifikasi, jika ada, yang dideklarasikan. Nonterminal declaration-specifiers terdiri dari urutan jenis dan penentu kelas penyimpanan yang menunjukkan tautan, durasi penyimpanan, dan setidaknya bagian dari jenis entitas yang dilambangkan deklarator. Deklarasi terdiri dari beberapa kombinasi penentu kelas penyimpanan, penentu jenis, kualifikasi jenis, deklarator, dan inisialisasi.

Deklarasi dapat berisi satu atau beberapa atribut opsional yang tercantum dalam attribute-seq; seq adalah singkatan untuk urutan. Atribut khusus Microsoft ini melakukan beberapa fungsi, yang dibahas secara terperinci di seluruh buku ini.

Dalam bentuk umum deklarasi variabel, type-specifier memberikan jenis data variabel. type-specifier dapat menjadi majemuk, seperti ketika jenis dimodifikasi oleh const atau volatile. declarator memberikan nama variabel, mungkin dimodifikasi untuk mendeklarasikan array atau jenis pointer. Contohnya,

int const *fp;

mendeklarasikan variabel bernama fp sebagai pointer ke nilai yang tidak dapat dimodifikasi (const) int. Anda dapat menentukan lebih dari satu variabel dalam deklarasi dengan menggunakan beberapa deklarator, yang dipisahkan dengan koma.

Deklarasi harus memiliki setidaknya satu deklarasi, atau penentu jenisnya harus mendeklarasikan tag struktur, tag gabungan, atau anggota enumerasi. Deklarator menyediakan informasi yang tersisa tentang pengidentifikasi. Deklarator adalah pengidentifikasi yang dapat dimodifikasi dengan kurung kurawal ([ ]), tanda bintang (*), atau tanda kurung ( ( ) ) untuk mendeklarasikan array, pointer, atau jenis fungsinya masing-masing. Saat Anda mendeklarasikan variabel sederhana (seperti karakter, bilangan bulat, dan item poin mengambang), atau struktur dan gabungan variabel sederhana, declarator hanyalah pengidentifikasi. Untuk informasi selengkapnya tentang deklarator, lihat Deklarasi dan Deklarasi Variabel.

Semua definisi adalah deklarasi secara implisit, tetapi tidak semua deklarasi adalah definisi. Misalnya, deklarasi variabel yang menggunakan penentu extern kelas penyimpanan adalah "referensi," daripada deklarasi "mendefinisikan". Jika variabel eksternal akan direferensikan sebelum ditentukan, atau jika ditentukan dalam file sumber lain dari tempatnya digunakan, deklarasi extern diperlukan. Penyimpanan tidak dialokasikan dengan deklarasi "referensi", variabel juga tidak dapat diinisialisasi dalam deklarasi.

Kelas penyimpanan atau jenis (atau keduanya) diperlukan dalam deklarasi variabel. Kecuali untuk __declspec, hanya satu penentu kelas penyimpanan yang diizinkan dalam deklarasi dan tidak semua penentu kelas penyimpanan diizinkan dalam setiap konteks. Kelas penyimpanan __declspec diizinkan dengan penentu kelas penyimpanan lainnya, dan diizinkan lebih dari sekali. Penentu kelas penyimpanan dari deklarasi memengaruhi bagaimana item yang dideklarasikan disimpan dan diinisialisasi, dan bagian mana dari program yang dapat mereferensikan item tersebut.

Terminal storage-class-specifier yang ditentukan dalam C termasuk auto, extern, register, static, dan typedef. Microsoft C juga menyertakan terminal storage-class-specifier __declspec. Semua terminal storage-class-specifier kecuali typedef dan __declspec dibahas dalam Kelas Penyimpanan. Untuk informasi tentang typedef, lihat typedef Deklarasi. Untuk informasi tentang __declspec, lihat Atribut Kelas Penyimpanan yang Diperluas.

Lokasi deklarasi dalam program sumber dan kehadiran atau ketakhadiran deklarasi lainnya dari variabel adalah faktor penting dalam menentukan masa berlaku variabel. Mungkin terdapat beberapa redeklarasi tetapi hanya satu definisi. Namun, definisi dapat muncul di lebih dari satu unit terjemahan. Untuk objek dengan hubungan internal, aturan ini berlaku secara terpisah untuk setiap unit terjemahan, karena objek yang ditautkan secara internal bersifat unik untuk unit terjemahan. Untuk objek dengan hubungan eksternal, aturan ini berlaku untuk seluruh program. Untuk informasi selengkapnya tentang visibilitas, lihat Masa Berlaku, Cakupan, Visibilitas, dan Hubungan.

Penentu jenis menyediakan beberapa informasi tentang jenis data pengidentifikasi. Penentu jenis default adalah int. Untuk informasi selengkapnya, lihat Penentu Jenis. Penentu jenis juga dapat menentukan tag jenis, nama komponen struktur dan gabungan, dan konstanta enumerasi. Untuk informasi selengkapnya, lihat Deklarasi Enumerasi, Deklarasi Struktur, dan Deklarasi Penyatuan.

Terdapat dua terminal type-qualifier: const dan volatile. Kualifikasi ini menentukan properti tambahan jenis yang hanya relevan saat mengakses objek jenis tersebut melalui nilai l. Untuk informasi selengkapnya tentang const dan volatile, lihat Pemberi kualifikasi jenis. Untuk definisi nilai-l, lihat Ekspresi Nilai-L dan Nilai-R.

Lihat juga

Ringkasan Sintaksis Bahasa C
Deklarasi dan Jenis
Ringkasan Deklarasi