Bendera Amaran g Teliti dan Verbose dalam C
Dalam nada yang sama dengan C di bawah gcc, set bendera amaran yang komprehensif boleh meningkatkan kualiti kod dalam C . Untuk C , bendera yang disyorkan adalah seperti berikut:
-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror -Wno-unused
Salin selepas log masuk
Amaran Yang Boleh Dipersoalkan
Walaupun senarai di atas merangkumi amaran yang paling berguna, amaran tertentu yang boleh dipersoalkan disertakan:
-
Wno-unused: Amaran ini menunjukkan pembolehubah yang tidak digunakan, yang boleh berguna untuk mengenal pasti kod yang mungkin tidak diperlukan. Walau bagaimanapun, ia boleh menjana positif palsu dan kegunaannya bergantung pada gaya pengekodan.
-
Wdisabled-optimization: Amaran ini menandakan bahagian kod yang tidak boleh dioptimumkan. Ia boleh membantu mengenal pasti peningkatan kod yang berpotensi tetapi mungkin menjana positif palsu.
-
Wfloat-equal: Amaran ini memberi amaran tentang menggunakan perbandingan berangka tepat dalam operasi titik terapung, yang boleh mempunyai hasil yang tidak pasti disebabkan oleh ralat pembundaran. Ia mungkin tidak terpakai secara universal.
-
Bahan-gaya-Wold: Amaran ini dicetuskan dengan menggunakan gaya hantaran yang lebih lama. Walaupun ia boleh membantu mengenal pasti isu mudah alih yang berpotensi, ia juga boleh menjana positif palsu dengan kod pustaka.
-
Wsign-conversion: Amaran ini menunjukkan penukaran yang berpotensi tidak selamat antara integer yang ditandatangani dan tidak ditandatangani. Ia disertakan untuk keselamatan tetapi boleh menjana banyak positif palsu dan memerlukan analisis yang teliti.
-
Wsign-promo: Sama seperti Wsign-conversion, amaran ini membenderakan promosi tersirat integer yang ditandatangani kepada jenis yang lebih besar. Ia boleh membantu mengenal pasti isu limpahan yang berpotensi.
-
Wswitch-default: Amaran ini menguatkuasakan kes lalai dalam pernyataan suis. Ini boleh membantu memastikan semua kes yang mungkin dikendalikan, tetapi ia mungkin tidak selalu diingini.
Amaran Tidak Termasuk
Amaran tertentu dikecualikan daripada senarai lalai atas pelbagai sebab:
-
Wabi: Tidak berkenaan dalam kes di mana keserasian binari bukan isu.
-
Waggregate-return: Tidak dianggap ralat, sebagai nilai pulangan pengoptimuman biasanya mengendalikan sebarang kesan negatif.
-
Wpenukaran: Menandakan penukaran tersirat, yang selalunya boleh menjadi jinak.
-
Weffc : Boleh menjana terlalu banyak amaran apabila tidak memulakan semua ahli data dalam senarai pemula.
-
Winline: Mungkin tidak sentiasa berguna untuk pengoptimuman fungsi sebaris.
-
Winvalid-pch: Tidak berkenaan apabila tidak menggunakan pengepala yang diprakompil.
-
Wmissing-format-attribute: Tidak digunakan apabila tidak berfungsi dengan sambungan gnu.
-
Wno-long-long: Mungkin tidak boleh digunakan untuk versi C 0x dan yang lebih baru.
-
Wpadded: Boleh membantu mengoptimumkan reka letak kelas tetapi mungkin tidak sentiasa praktikal untuk diselenggara.
-
Wstack-protector: Tidak digunakan tanpa menggunakan -fstack-protector.
-
Wstrict-aliasing: Tahap 3 disertakan dalam -Wall tetapi mungkin tidak diperlukan.
-
Wswitch-enum: Tidak diingini untuk semua pernyataan suis, kerana ia memerlukan pengendalian eksplisit perubahan enum.
-
Wunsafe-loop-optimizations: Menjana banyak amaran palsu , menjadikan pengesahan manual perlu.
-
Wzero-as-null-pointer-constant: Amaran GCC-4.7 sahaja.
Dengan memahami kekuatan dan pengehadan amaran ini, pembangun boleh menyesuaikan amaran tersebut agar sesuai dengan amalan pengekodan khusus dan keperluan projek mereka.
Atas ialah kandungan terperinci Apakah bendera amaran g terbaik untuk meningkatkan kualiti kod C, dan amaran yang manakah harus dipertimbangkan dengan teliti atau dikecualikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!