Apa konvensi penamaan yang biasa digunakan di C? Saya tahu setidaknya ada dua:
- GNU / linux / K&R dengan fungsi huruf_kecil
- ? nama? dengan fungsi UpperCaseFoo
Saya berbicara tentang C hanya di sini. Sebagian besar proyek kami adalah sistem tertanam kecil di mana kami menggunakan C.
Inilah yang saya rencanakan untuk digunakan untuk proyek saya berikutnya:
C Konvensi Penamaan
Struct TitleCase
Struct Members lower_case or lowerCase
Enum ETitleCase
Enum Members ALL_CAPS or lowerCase
Public functions pfx_TitleCase (pfx = two or three letter module prefix)
Private functions TitleCase
Trivial variables i,x,n,f etc...
Local variables lower_case or lowerCase
Global variables g_lowerCase or g_lower_case (searchable by g_ prefix)
c
naming-conventions
JeffV
sumber
sumber
Jawaban:
Hal terpenting di sini adalah konsistensi. Karena itu, saya mengikuti konvensi pengkodean GTK +, yang dapat diringkas sebagai berikut:
MAX_BUFFER_SIZE
,TRACKING_ID_PREFIX
.GtkWidget
,TrackingOrder
.gtk_widget_show()
,tracking_order_process()
.GtkWidget *foo
,TrackingOrder *bar
._refrobnicate_data_tables()
,_destroy_cache()
.sumber
static
dan melewatkan awalan modul, jadi jikagtk_widget_show()
fungsi dengan ruang lingkup file itu akan menjadi sederhanawidget_show()
dengan kelas penyimpanan statis ditambahkan._
implementasi dan penggunaan di masa mendatang. Ada beberapa pengecualian untuk nama yang diawali dengan_
tetapi menurut saya tidak sepadan dengan kesulitan menghafalnya. Aturan yang aman untuk dilalui adalah jangan pernah menggunakan nama yang dimulai dengan_
kode Anda. Entri C FAQ yang relevan: c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=decl#namespaceGlobal variables: just don't use global variables. They are evil.
- kecuali Anda sedang mengerjakan proyek tertanam dan Anda memiliki RAM 1024 byte dan CPU 8MHz."Struct pointers" bukanlah entitas yang membutuhkan klausul konvensi penamaan untuk menutupinya. Mereka adil
struct WhatEver *
. JANGAN menyembunyikan fakta bahwa ada pointer yang terlibat dengan typedef yang pintar dan "jelas". Ini tidak memiliki tujuan, lebih lama untuk mengetik, dan menghancurkan keseimbangan antara deklarasi dan akses.sumber
Pertama C tidak memiliki fungsi publik / pribadi / virtual. Itu C ++ dan memiliki konvensi yang berbeda. Di C biasanya Anda memiliki:
C ++ lebih kompleks. Saya telah melihat campuran yang nyata di sini. Kasus unta untuk nama kelas atau huruf kecil + garis bawah (kasus unta lebih umum menurut pengalaman saya). Struktur jarang digunakan (dan biasanya karena perpustakaan memerlukannya, jika tidak, Anda akan menggunakan kelas).
sumber
external linkage
untuk "acara publik" daninternal linkage
"acara pribadi".ALL_CAPS
sering digunakan untuk nilai enum juga.Anda tahu, saya suka membuatnya sederhana, tapi jelas ... Jadi inilah yang saya gunakan, di C:
i,n,c
(. Hanya satu huruf Jika satu huruf tidak jelas, kemudian membuatnya Variabel lokal), dll ...lowerCamelCase
g_lowerCamelCase
ALL_CAPS
p_
ke awalan. Untuk variabel globalgp_var
, untuk variabel lokalp_var
, untuk variabel konstp_VAR
. Jika penunjuk jauh digunakan, gunakan anfp_
sebagai penggantip_
.ModuleCamelCase
(Module = nama modul lengkap, atau singkatan 2-3 huruf, tapi masih masukCamelCase
.)lowerCamelCase
ModuleCamelCase
ALL_CAPS
ModuleCamelCase
CamelCase
CamelCase
Saya mengetikkan struct saya, tetapi menggunakan nama yang sama untuk tag dan typedef tersebut. Tag tidak dimaksudkan untuk digunakan secara umum. Sebaliknya lebih disukai menggunakan typedef tersebut. Saya juga meneruskan mendeklarasikan typedef di header modul publik untuk enkapsulasi dan agar saya dapat menggunakan nama typedef dalam definisi.
struct
Contoh Lengkap :sumber
Pengkodean di C #, java, C, C ++ dan tujuan C pada saat yang sama, saya telah mengadopsi konvensi penamaan yang sangat sederhana dan jelas untuk menyederhanakan hidup saya.
Pertama-tama, ini bergantung pada kekuatan IDE modern (seperti eclipse, Xcode ...), dengan kemungkinan untuk mendapatkan informasi cepat dengan mengarahkan atau klik ctrl ... Menerima itu, saya menghentikan penggunaan awalan apa pun, sufiks dan penanda lain yang hanya diberikan oleh IDE.
Kemudian, konvensi:
parameter, struktur dan elemen gabungan
Dan itu dia.
Memberikan
sumber
Saya akan merekomendasikan untuk tidak mencampur case unta dan pemisahan garis bawah (seperti yang Anda usulkan untuk anggota struct). Ini membingungkan. Anda akan berpikir, hei saya punya
get_length
jadi saya mungkin harus melakukannyamake_subset
dan kemudian Anda mengetahui itu sebenarnyamakeSubset
. Gunakan prinsip paling tidak heran, dan bersikaplah konsisten.Saya menemukan CamelCase berguna untuk mengetik nama, seperti struct, typedefs dan enums. Itu tentang semuanya. Untuk yang lainnya (nama fungsi, nama anggota struct, dll.) Saya menggunakan underscore_separation.
sumber
Ini adalah yang (tampaknya) tidak umum, yang menurut saya berguna: nama modul di CamelCase, lalu garis bawah, lalu nama fungsi atau cakupan file di CamelCase. Jadi contohnya:
sumber
Saya bingung dengan satu hal: Anda berencana membuat konvensi penamaan baru untuk proyek baru. Umumnya Anda harus memiliki konvensi penamaan yang berlaku di seluruh perusahaan atau tim. Jika Anda sudah memiliki proyek yang memiliki bentuk konvensi penamaan apa pun, Anda tidak boleh mengubah konvensi untuk proyek baru. Jika konvensi di atas hanyalah kodifikasi dari praktik Anda yang ada, maka Anda adalah emas. Semakin berbeda dari standar de facto yang ada, semakin sulit untuk mendapatkan mindshare dalam standar baru.
Tentang satu-satunya saran yang akan saya tambahkan adalah saya menyukai _t di akhir tipe dalam gaya uint32_t dan size_t. Ini sangat C-ish bagi saya meskipun beberapa mungkin mengeluh itu hanya "kebalikan" Hongaria.
sumber
Anda juga harus memikirkan urutan kata-kata untuk melengkapi nama otomatis .
Praktik yang baik: nama perpustakaan + nama modul + tindakan + subjek
Jika suatu bagian tidak relevan, lewati saja, tetapi setidaknya nama modul dan tindakan harus selalu disajikan.
Contoh:
os_task_set_prio
,list_get_size
,avg_get
OS_TASK_PRIO_MAX
sumber
Mungkin ada banyak, terutama IDE mendikte beberapa tren dan konvensi C ++ juga mendorong. Untuk C biasanya:
Notasi Hungaria untuk global tidak masalah, tetapi tidak untuk tipe. Dan bahkan untuk nama yang sepele, harap gunakan setidaknya dua karakter.
sumber
Saya pikir itu bisa membantu untuk pemula: Konvensi penamaan variabel di c
sumber