Apakah memiliki file header C ++ tanpa ekstensi merupakan praktik yang baik?


9

Saya memiliki argumen dengan kolega saya tentang pedoman C ++ untuk diikuti.

Dia saat ini mendesain semua perpustakaannya seperti itu:

  • Dia menggunakan huruf besar dan kecil secara tidak konsisten dalam nama file-nya
  • Beberapa tajuknya tidak memiliki ekstensi

Saya percaya bahwa tidak memiliki ekstensi adalah sesuatu yang disediakan untuk file standar C ++ dan bahwa menggunakan huruf besar rentan kesalahan (terutama ketika Anda berurusan dengan kode yang dimaksudkan untuk bekerja pada Windows dan Linux).

Maksudnya adalah bahwa ia mengikuti Qtkonvensi (bahkan untuk kode yang tidak menggunakan Qt) dan terus berkata: "Jika Qt melakukannya dengan cara itu, maka itu tidak mungkin buruk."

Sekarang saya mencoba untuk tetap berpikiran terbuka, tetapi saya benar-benar merasa tidak enak ketika harus bekerja di / dengan perpustakaannya. Apakah ada seperangkat aturan umum tentang hal ini? Apakah standar mengatakan sesuatu tentangnya?

Terima kasih banyak.


3
#define signal... ... ... ("Jika Qt melakukannya seperti itu, maka itu tidak mungkin buruk.") - Saya tidak bisa mengatakan saya pribadi setuju dengan semua pilihan desain mereka.
justin

@ Justin: Aku juga. Aku tidak menentang Qt. Saya bahkan berpikir itu adalah perpustakaan yang luar biasa tetapi beberapa pilihan desain mereka benar-benar terasa salah bagi saya.
ereOn

1
@ Justin Saya telah melihat makro dimulai dengan _populer, kode yang digunakan luas, tapi pasti bertentangan dengan standar.
Luchian Grigore

1
tetapi inilah satu alasan nyata untuk menghindari tajuk tanpa ekstensi: IDE utama dan editor teks saya tidak akan mengenalinya secara otomatis. saya hanya menggunakan *.hppuntuk header c ++, dan semua alat saya "mengerti".
justin

5
Qt menggunakan konvensi itu persis karena programmer pintar tidak. Itu artinya tajuk Anda tidak akan berbenturan dengan tajuk Qt baru.
MSalters

Jawaban:


16

Ekstensi (atau kurangnya), sejauh yang saya tahu, tidak akan menyebabkan masalah. Saya akan mengatakan bahwa menjatuhkan ekstensi sama sekali tidak nyaman karena membuat sulit untuk mencari file header (misalnya dengan wildcard * .h dan * .hpp) dan itu membuatnya lebih sulit untuk mengidentifikasi isi file (misalnya jika editor Anda bergantung pada ekstensi untuk memilih mode penyorotan sintaks yang tepat).

Dari sudut pandang kode, tidak ada banyak perbedaan, bahkan casingnya tidak bermasalah selama Anda menggunakan case yang konsisten di mana-mana dan tidak bergantung pada perbedaan case saja untuk membedakan file. Dari sudut pandang kenyamanan, lebih mudah untuk tetap menggunakan huruf kecil dan memiliki ekstensi (baik .h atau .hpp).

Namun, yang lebih penting dari semua yang disebutkan di atas, adalah memilih satu konvensi untuk seluruh tim pengembangan Anda dan menaatinya . Jauh lebih buruk untuk melihat bagaimana sebuah file ditutup, dinamai, dan ekstensi apa yang digunakannya kapan pun Anda ingin memasukkan sesuatu - semua ini harus "dapat ditebak" dengan pengetahuan tentang hal yang Anda coba gunakan.


Memilih satu konvensi dan berpegang teguh pada itu bukanlah ide yang buruk, tetapi bagaimana jika konvensi yang ada dapat ditingkatkan? Dalam hal ini, mungkin itu ide yang baik untuk mengubah arah.
kotlinski

@kotlinski Ini adalah salah satu kasus di mana tidak ada yang dapat Anda lakukan untuk memperbaiki situasi karena apa pun yang Anda pilih adalah masalah preferensi. Sebenarnya, memiliki beberapa ekstensi, saya katakan, lebih baik daripada tidak sama sekali, karena OS (baca, Windows) dapat menentukan program untuk membuka file apa berdasarkan ekstensi.
Paul

@ PaulManta: Tapi bukankah Anda berdebat melawan diri sendiri di sini? Pertama, Anda mengatakan bahwa tidak ada cara untuk meningkatkan apa pun. Kemudian, Anda mengatakan memiliki ekstensi lebih baik daripada tidak. Itu adalah semacam sikap pengecut, mengatakan bahwa tidak ada perubahan yang mungkin terjadi.
kotlinski

@kotlinski Secara umum, saya kira itu tergantung berapa banyak kode lama Anda akan bekerja dengan, apakah akan layak untuk mengubah semuanya ke konvensi baru dan apa dampak dari konvensi pencampuran. Dalam hal ini saya setuju dengan Paul Manta - ini sebagian besar merupakan preferensi pribadi, dengan perpanjangan lebih disukai oleh sebagian besar karena alasan praktis.
Adam Bowen

1
@kotlinski Tidak ada cara untuk meningkatkan apa pun, tetapi ada cara untuk memperburuk keadaan. Diskusi ini tidak ada gunanya dengan diskusi spasi-vs-tab. Cukup pilih satu konvensi dan lakukan sesuatu yang bermanfaat.
Paul

6

Tidak ada aturan (dalam standar) bahwa hanya file header standar dapat tanpa ekstensi; nama file bisa menjadi apa saja yang Anda inginkan. Namun praktik umum yang baik menunjukkan bahwa:

  1. tidak ada file yang tanpa ekstensi, dan

  2. berbagai jenis file memiliki ekstensi yang berbeda — khususnya, header C ++ menggunakan ekstensi yang berbeda ( .hppatau .hh) dari header yang dapat diterima oleh kompiler C.

(Menyesal, aturan kedua sering dilanggar, dan orang sering melihat file header C ++ dengan .h. Dari pengalaman pribadi, saya dapat memastikan bahwa ini akan menyebabkan masalah pemeliharaan di jalan, tetapi ini adalah praktik umum.)

Sehubungan dengan kasus, sangat diperlukan kehati-hatian, karena nama file sensitif dalam beberapa sistem, dan tidak pada yang lain. Saya telah melihat dua aturan berbeda yang berfungsi: baik semuanya dalam huruf kecil dalam nama file, atau nama file mengikuti aturan yang persis sama tentang kasus seperti untuk simbol di C ++.

Dalam kedua kasus, Anda menetapkan aturan untuk proyek, dengan konsensus, dan semua orang mengikutinya.


1
Saya benar-benar bersama James dalam hal ini. Itu membuatnya menjadi mimpi buruk mendapatkan alat untuk bekerja dengan tepat pada 2 jenis file header yang berbeda jika memiliki ekstensi yang sama.

@ TomTanner Dan lebih buruk lagi jika Anda memiliki file tanpa ekstensi. Saya sebagian besar bekerja di lingkungan Unix, dan selalu membuat saya frustrasi (dan menyebabkan masalah) bahwa file yang dapat dieksekusi tidak memiliki ekstensi.

6
If Qt does it that way, then it can't be bad.

Iya. Ya, benar-benar bisa. Desain perpustakaan mereka adalah "Kami sangat ingin menjadi Java". Ini berantakan total. Perpustakaan standar jauh lebih baik.

Juga, pada dasarnya, ini adalah kesalahan logis. Desain Qt hanya layak ditiru jika Anda dapat memberikan argumen logis tentang mengapa itu baik, itu tidak baik hanya karena itu Qt.


Ini adalah argumen empiris. Ini adalah produk perangkat lunak besar yang digunakan oleh banyak orang. Jika pilihan konvensi penamaan ini menyebabkan masalah yang signifikan, itu akan diketahui dan mungkin berubah sekarang. Karena ini bukan masalahnya, tidak mungkin terlalu buruk. Itu tidak berarti bahwa itu adalah solusi terbaik.
H. Rittich

0

Seperti yang saya tahu, sejak standar 1998, hanya header perpustakaan standar yang akan tanpa .h. Jadi file header C ++ non-standar secara konvensional masih ditulis dengan .h. Tetapi ingatlah bahwa itu adalah konvensi, Anda tidak dapat menggunakan ekstensi atau bahkan ekstensi .txt, seperti Anda menulis kelas Anda dimulai dengan huruf kecil, ini masih berfungsi, tetapi itu bukan konvensi.


3
Btw "Jika Qt melakukannya seperti itu, maka itu tidak mungkin buruk." itu argumen yang sangat buruk ...

2
Standar tidak ada yang mengatakan tentang bagaimana header yang ditentukan pengguna harus nama. Ini hanya menentukan nama header standar.
Mike Seymour

0

Ini adalah konvensi bukan aturan, tidak ada kendala untuk mematuhi konvensi, tetapi konvensi memang membuat hidup lebih mudah ketika Anda datang untuk referensi.

sesuai dengan ekstensi (.h, .hpp) file-file yang telah dimasukkan dalam c ++ tidak perlu memiliki ekstensi, Anda harus menggunakan ekstensi jika Anda menggunakan header dari selain c ++, seperti c library atau boost library.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.