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-specifiers
attribute-seq
opt opt init-declarator-list
;
/* attribute-seq
opt khusus untuk Microsoft */
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
Memilih
type-specifier
declaration-specifiers
Memilih
type-qualifier
declaration-specifiers
Memilih
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk