Rumah Tutorial sistem LINUX Perintah GCC: Membuka Kunci Kemungkinan Tidak Berkesudahan Pengaturcaraan Linux

Perintah GCC: Membuka Kunci Kemungkinan Tidak Berkesudahan Pengaturcaraan Linux

Feb 10, 2024 pm 06:54 PM
linux tutorial linux sistem linux arahan linux skrip shell overflow embeddedlinux Bermula dengan linux pembelajaran linux

Sebagai penyusun sumber terbuka yang popular, GCC (GNU Compiler Collection) telah menjadi salah satu piawaian untuk pembangunan perisian Linux. Jika anda ingin memasuki dunia pengaturcaraan Linux, menguasai arahan GCC adalah penting. Sama ada anda seorang pemula atau pembangun profesional, GCC membuka kemungkinan yang tidak berkesudahan untuk anda.

Pengkompil gcc menyediakan senarai pilihan baris arahan yang hampir tidak berkesudahan. Sudah tentu, tiada siapa yang akan menggunakan atau mahir dalam semua pilihan baris perintahnya, tetapi terdapat beberapa pilihan baris perintah yang setiap pengguna gcc perlu tahu - jika tidak perlu tahu. Sesetengah daripada mereka biasa digunakan dan yang lain kurang biasa digunakan, tetapi hanya kerana mereka kurang biasa digunakan tidak bermakna mereka kurang berguna daripada yang pertama.

Dalam siri artikel ini, kami menumpukan pada beberapa pilihan baris arahan gcc yang tidak biasa tetapi berguna Beberapa pilihan baris arahan tersebut telah disebutkan dalam bahagian pertama.

Saya tidak tahu sama ada anda boleh ingat bahawa pada permulaan bahagian pertama siri tutorial ini, saya menyebut secara ringkas pilihan -Wall yang biasanya digunakan oleh pembangun untuk menjana amaran, dan tidak termasuk beberapa amaran khas. Jika anda tidak tahu tentang amaran khas ini dan tidak tahu cara menjananya, jangan risau, saya akan menerangkan semua butiran mengenainya dalam artikel ini.

Selain itu, artikel ini juga akan merangkumi pilihan amaran gcc yang berkaitan dengan nilai titik terapung dan cara mengurus senarai pilihan baris arahan gcc dengan lebih baik apabila ia menjadi besar.

Sebelum meneruskan, sila ingat bahawa semua contoh, arahan dan arahan dalam tutorial ini telah diuji pada sistem pengendalian Ubuntu 16.04 LTS dan gcc 5.4.0.

Perintah GCC: Membuka Kunci Kemungkinan Tidak Berkesudahan Pengaturcaraan Linux

Jana amaran apabila -Pilihan dinding tidak disertakan

Walaupun pilihan -Wall pengkompil gcc meliputi kebanyakan bendera amaran, masih terdapat beberapa amaran yang tidak dapat dijana. Untuk menjananya, gunakan pilihan -Wextra.

Sebagai contoh, kod berikut:

#include 
#include 
int main()
{
    int i=0;
    /* ...
       some code here 
       ...
    */

    if(i);
        return 1;
     return 0; 
}
Salin selepas log masuk

Saya secara tidak sengaja meletakkan koma bertitik tambahan selepas syarat if. Sekarang, jika anda menyusun menggunakan arahan gcc berikut, tiada amaran akan dijana.
gcc -Ujian dinding.c -o ujian

Tetapi jika anda menggunakan pilihan -Wextra pada masa yang sama untuk menyusun: gcc -Wall -Wextra test.c -o test
Amaran seperti berikut akan dihasilkan:

test.c: In function ‘main’:
test.c:10:8: warning: suggest braces around empty body in an ‘if’ statement
[-Wempty-body] if(i);
Salin selepas log masuk

Adalah jelas daripada amaran di atas bahawa pilihan -Wextra secara dalaman membolehkan pilihan -Wempty-body, membolehkan kod yang mencurigakan dikesan dan amaran dijana. Di bawah adalah semua bendera amaran yang didayakan oleh pilihan ini.

-Wclobbered
-Wempty-body
-Wignored-qualifiers
-Wmissing-field-initializers
-Wmissing-parameter-type(仅针对 C 语言)
-Wold-style-declaration(仅针对 C 语言)
-Woverride-init
-Wsign-compare
-Wtype-limits
-Wuninitialized
-Wunused-parameter(只有和-Wunused 或 -Wall 选项使用时才会启用)
-Wunused-but-set-parameter (只有和-Wunused或-Wall 选项使用时才会生成)
Salin selepas log masuk

Jika anda ingin mengetahui lebih lanjut mengenai bendera yang dinyatakan di atas, sila semak manual gcc.

Selain itu, pilihan -Wextra juga akan menjana amaran dalam situasi berikut:

一个指针和整数 0 进行 , 或 >= 比较
(仅 C++)一个枚举类型和一个非枚举类型同时出现在一个条件表达式中
(仅 C++)有歧义的虚拟基底
(仅 C++)寄存器类型的数组加下标
(仅 C++)对寄存器类型的变量进行取址
(仅 C++)基类没有在派生类的复制构建函数中进行初始化
Salin selepas log masuk

Jana amaran apabila membandingkan nilai titik terapung untuk kesaksamaan

Anda mungkin sudah tahu bahawa nilai titik terapung tidak boleh dibandingkan untuk kesamaan yang tepat (jika tidak, baca Soalan Lazim yang berkaitan dengan perbandingan titik terapung). Tetapi jika anda secara tidak sengaja melakukan ini, adakah pengkompil gcc akan mengeluarkan ralat atau amaran? Mari ujinya:

Berikut ialah sekeping kod yang menggunakan operator == untuk membandingkan nilai titik terapung:

#include

void compare(float x, float y)
{
    if(x == y)
    {
        printf("/n EQUAL /n");
    }
}

int main(void)
{
    compare(1.234, 1.56789);

    return 0; 
}
Salin selepas log masuk

Gunakan arahan gcc berikut (dengan pilihan -Wall dan -Wextra) untuk menyusun kod ini:

gcc -Wall -Wextra test.c -o test
Salin selepas log masuk

Malangnya, arahan di atas tidak menghasilkan sebarang amaran yang berkaitan dengan perbandingan nilai titik terapung. Semakan pantas pada manual gcc mendedahkan bahawa terdapat pilihan -Wfloat-equal khusus yang boleh digunakan dalam situasi ini.
Berikut ialah arahan dengan pilihan ini:

gcc -Wall -Wextra -Wfloat-equal test.c -o test
Salin selepas log masuk

Berikut ialah output yang dihasilkan oleh arahan ini:

test.c: In function ‘compare’:
test.c:5:10: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]
 if(x == y)
Salin selepas log masuk

Seperti yang anda lihat dalam output di atas, pilihan -Wfloat-equal memaksa pengkompil gcc untuk menjana amaran yang berkaitan dengan perbandingan nilai titik terapung.

Berikut ialah perkataan manual gcc tentang pilihan ini:

Idea di sebalik ini ialah kadangkala mudah bagi pengaturcara untuk memikirkan nilai titik terapung sebagai nombor nyata yang tidak terhingga tepat. Jika anda melakukan ini, maka anda perlu memikirkan, dengan memprofilkan kod, atau sebaliknya, ralat maksimum maksimum atau mungkin yang diperkenalkan oleh pengiraan ini, dan kemudian benarkan ini semasa melakukan perbandingan (dan apabila menghasilkan output, tetapi itu adalah berbeza soalan) kesilapan. Khususnya, anda tidak sepatutnya menyemak kesamaan, tetapi anda harus menyemak sama ada kedua-dua nilai mungkin mempunyai julat bertindih ini dilakukan menggunakan pengendali hubungan, jadi perbandingan kesamaan mungkin satu kesilapan.

Cara mengurus pilihan baris arahan gcc dengan lebih baik

如果在你使用的 gcc 命令中,命令行选项列表变得很大而且很难管理,那么你可以把它放在一个文本文件中,然后把文件名作为 gcc 命令的一个参数。之后,你必须使用@file 命令行选项。

比如,下面这行是你的 gcc 命令:
gcc -Wall -Wextra -Wfloat-equal test.c -o test

然后你可以把这三个和警告相关的选项放到一个文件里,文件名叫做 gcc-options:
$ cat gcc-options
-Wall -Wextra -Wfloat-equal
这样,你的 gcc 命令会变得更加简洁并且易于管理:
gcc @gcc-options test.c -o test

下面是 gcc 手册关于 @file 的说明:

从文件中读取命令行选项。读取到的选项随之被插入到原始 @file 选项所在的位置。如果文件不存在或者无法读取,那么这个选项就会被当成文字处理,而不会被删除。

文件中的选项以空格分隔。选项中包含空白字符的话,可以用一个由单引号或双引号包围完整选项。任何字符(包括反斜杠: ‘/’)均可能通过一个 ‘/’ 前缀而包含在一个选项中。如果该文件本身包含额外的 @file选项,那么它将会被递归处理。

结论

在这个系列的教程中,我们一共讲解了 5 个不常见但是很有用的 gcc 命令行选项:

-Save-temps
-g
-Wextra
-Wfloat-equal

@file
Salin selepas log masuk

记得花时间练习使用每一个选项,同时不要忘了浏览 gcc 手册上面所提供的关于它们的全部细节。

因此,无论你是正在学习Linux编程,还是已经成为一名经验丰富的开发者,掌握GCC命令将会让你事半功倍。尝试使用GCC命令去编译各种不同的程序,挑战自己的极限,让你的Linux编程之路越来越精彩

Atas ialah kandungan terperinci Perintah GCC: Membuka Kunci Kemungkinan Tidak Berkesudahan Pengaturcaraan Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Empat cara untuk melaksanakan multithreading dalam bahasa c Empat cara untuk melaksanakan multithreading dalam bahasa c Apr 03, 2025 pm 03:00 PM

Multithreading dalam bahasa dapat meningkatkan kecekapan program. Terdapat empat cara utama untuk melaksanakan multithreading dalam bahasa C: Buat proses bebas: Buat pelbagai proses berjalan secara bebas, setiap proses mempunyai ruang ingatan sendiri. Pseudo-Multithreading: Buat pelbagai aliran pelaksanaan dalam proses yang berkongsi ruang memori yang sama dan laksanakan secara bergantian. Perpustakaan multi-threaded: Gunakan perpustakaan berbilang threaded seperti PTHREADS untuk membuat dan mengurus benang, menyediakan fungsi operasi benang yang kaya. Coroutine: Pelaksanaan pelbagai threaded ringan yang membahagikan tugas menjadi subtask kecil dan melaksanakannya pada gilirannya.

Cara Membuka Web.xml Cara Membuka Web.xml Apr 03, 2025 am 06:51 AM

Untuk membuka fail web.xml, anda boleh menggunakan kaedah berikut: Gunakan editor teks (seperti Notepad atau TextEdit) untuk mengedit arahan menggunakan persekitaran pembangunan bersepadu (seperti Eclipse atau NetBeans) (Windows: Notepad Web.xml; Mac/Linux: Open -A -A TextEdit Web.xml)

Bolehkah penterjemah Python dipadam dalam sistem Linux? Bolehkah penterjemah Python dipadam dalam sistem Linux? Apr 02, 2025 am 07:00 AM

Mengenai masalah menghapuskan penterjemah python yang dilengkapi dengan sistem Linux, banyak pengagihan Linux akan memasang semula penterjemah python apabila dipasang, dan ia tidak menggunakan pengurus pakej ...

Untuk apa yang paling baik digunakan oleh Linux? Untuk apa yang paling baik digunakan oleh Linux? Apr 03, 2025 am 12:11 AM

Linux paling baik digunakan sebagai pengurusan pelayan, sistem tertanam dan persekitaran desktop. 1) Dalam pengurusan pelayan, Linux digunakan untuk menjadi tuan rumah laman web, pangkalan data, dan aplikasi, menyediakan kestabilan dan kebolehpercayaan. 2) Dalam sistem tertanam, Linux digunakan secara meluas di rumah pintar dan sistem elektronik automotif kerana fleksibiliti dan kestabilannya. 3) Dalam persekitaran desktop, Linux menyediakan aplikasi yang kaya dan prestasi yang cekap.

Bagaimana keserasian Debian Hadoop Bagaimana keserasian Debian Hadoop Apr 02, 2025 am 08:42 AM

Debianlinux terkenal dengan kestabilan dan keselamatannya dan digunakan secara meluas dalam persekitaran pelayan, pembangunan dan desktop. Walaupun kini terdapat kekurangan arahan rasmi mengenai keserasian langsung dengan Debian dan Hadoop, artikel ini akan membimbing anda tentang cara menggunakan Hadoop pada sistem Debian anda. Keperluan Sistem Debian: Sebelum memulakan konfigurasi Hadoop, sila pastikan sistem Debian anda memenuhi keperluan operasi minimum Hadoop, yang termasuk memasang Java Runtime Environment (JRE) dan pakej Hadoop. Langkah Penyebaran Hadoop: Muat turun dan Unzip Hadoop: Muat turun versi Hadoop yang anda perlukan dari laman web Apachehadoop rasmi dan selesaikannya

Adakah saya perlu memasang klien oracle semasa menyambung ke pangkalan data oracle menggunakan GO? Adakah saya perlu memasang klien oracle semasa menyambung ke pangkalan data oracle menggunakan GO? Apr 02, 2025 pm 03:48 PM

Adakah saya perlu memasang klien oracle semasa menyambung ke pangkalan data oracle menggunakan GO? Semasa membangun di GO, menyambung ke pangkalan data Oracle adalah keperluan biasa ...

Adakah debian rentetan serasi dengan pelbagai pelayar Adakah debian rentetan serasi dengan pelbagai pelayar Apr 02, 2025 am 08:30 AM

"Debianstrings" bukan istilah standard, dan makna khususnya masih belum jelas. Artikel ini tidak dapat mengulas secara langsung mengenai keserasian penyemak imbasnya. Walau bagaimanapun, jika "debianstrings" merujuk kepada aplikasi web yang dijalankan pada sistem Debian, keserasian penyemak imbasnya bergantung kepada seni bina teknikal aplikasi itu sendiri. Sebilangan besar aplikasi web moden komited untuk keserasian penyemak imbas. Ini bergantung kepada standard web berikut dan menggunakan teknologi front-end yang serasi (seperti HTML, CSS, JavaScript) dan teknologi back-end (seperti PHP, Python, Node.js, dll.). Untuk memastikan bahawa aplikasi itu serasi dengan pelbagai pelayar, pemaju sering perlu menjalankan ujian silang dan menggunakan responsif

See all articles