Heim System-Tutorial LINUX GCC-Befehle: Erschließung der endlosen Möglichkeiten der Linux-Programmierung

GCC-Befehle: Erschließung der endlosen Möglichkeiten der Linux-Programmierung

Feb 10, 2024 pm 06:54 PM
linux linux教程 linux系统 linux命令 shell脚本 overflow eingebettetes Linux Erste Schritte mit Linux Linux-Lernen

Als beliebter Open-Source-Compiler ist GCC (GNU Compiler Collection) zu einem der Standards für die Linux-Softwareentwicklung geworden. Wenn Sie in die Welt der Linux-Programmierung einsteigen möchten, ist die Beherrschung der GCC-Befehle unerlässlich. Egal, ob Sie Anfänger oder professioneller Entwickler sind, GCC eröffnet Ihnen endlose Möglichkeiten.

Der gcc-Compiler bietet eine nahezu endlose Liste von Befehlszeilenoptionen. Natürlich wird niemand alle Befehlszeilenoptionen verwendet haben oder diese beherrschen, aber es gibt einige Befehlszeilenoptionen, die jeder gcc-Benutzer kennen sollte – wenn nicht sogar erforderlich ist. Einige von ihnen werden häufig verwendet, andere weniger häufig. Aber nur weil sie weniger häufig verwendet werden, heißt das nicht, dass sie weniger nützlich sind als erstere.

In dieser Artikelserie konzentrieren wir uns auf einige ungewöhnliche, aber nützliche gcc-Befehlszeilenoptionen. Mehrere solcher Befehlszeilenoptionen wurden im ersten Abschnitt erwähnt.

Ich weiß nicht, ob Sie sich daran erinnern können, dass ich zu Beginn des ersten Teils dieser Tutorialreihe kurz die Option -Wall erwähnt habe, die Entwickler normalerweise zum Generieren von Warnungen verwenden, und einige spezielle Warnungen nicht enthält. Wenn Sie diese speziellen Warnungen nicht kennen und nicht wissen, wie man sie generiert, machen Sie sich keine Sorgen, ich werde in diesem Artikel alle Einzelheiten dazu erläutern.

Darüber hinaus werden in diesem Artikel auch gcc-Warnoptionen im Zusammenhang mit Gleitkommawerten behandelt und wie die gcc-Befehlszeilenoptionsliste besser verwaltet werden kann, wenn sie groß wird.

Bevor Sie fortfahren, denken Sie bitte daran, dass alle Beispiele, Befehle und Anweisungen in diesem Tutorial auf dem Betriebssystem Ubuntu 16.04 LTS und gcc 5.4.0 getestet wurden.

GCC-Befehle: Erschließung der endlosen Möglichkeiten der Linux-Programmierung

Warnungen generieren, wenn die Option „Wand“ nicht enthalten ist

Obwohl die Option -Wall des gcc-Compilers die meisten Warnflags abdeckt, gibt es dennoch einige Warnungen, die nicht generiert werden können. Um sie zu generieren, verwenden Sie die Option -Wextra.

Zum Beispiel der folgende Code:

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

    if(i);
        return 1;
     return 0; 
}
Nach dem Login kopieren

Ich habe nach der if-Bedingung versehentlich ein zusätzliches Semikolon eingefügt. Wenn Sie nun mit dem folgenden gcc-Befehl kompilieren, werden keine Warnungen generiert.
gcc -Wall test.c -o test

Aber wenn Sie gleichzeitig die Option -Wextra zum Kompilieren verwenden: gcc -Wall -Wextra test.c -o test
Es wird eine Warnung wie die folgende generiert:

test.c: In function ‘main’:
test.c:10:8: warning: suggest braces around empty body in an ‘if’ statement
[-Wempty-body] if(i);
Nach dem Login kopieren

Aus der obigen Warnung geht klar hervor, dass die Option -Wextra intern die Option -Wempty-body aktiviert, wodurch verdächtiger Code erkannt und Warnungen generiert werden können. Unten sind alle Warnflags aufgeführt, die durch diese Option aktiviert werden.

-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 选项使用时才会生成)
Nach dem Login kopieren

Wenn Sie mehr über die oben genannten Flags erfahren möchten, lesen Sie bitte das gcc-Handbuch.

Darüber hinaus generiert die Option -Wextra auch Warnungen in den folgenden Situationen:

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

Warnung generieren, wenn Gleitkommawerte auf Gleichheit verglichen werden

Vielleicht wissen Sie bereits, dass Gleitkommawerte nicht auf exakte Gleichheit verglichen werden können (falls nicht, lesen Sie die FAQ zu Gleitkommavergleichen). Aber wenn Sie dies versehentlich tun, gibt der gcc-Compiler dann einen Fehler oder eine Warnung aus? Lass es uns testen:

Hier ist ein Code, der den ==-Operator verwendet, um Gleitkommawerte zu vergleichen:

#include

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

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

    return 0; 
}
Nach dem Login kopieren

Verwenden Sie den folgenden gcc-Befehl (mit den Optionen -Wall und -Wextra), um diesen Code zu kompilieren:

gcc -Wall -Wextra test.c -o test
Nach dem Login kopieren

Leider generiert der obige Befehl keine Warnungen im Zusammenhang mit dem Vergleich von Gleitkommawerten. Ein kurzer Blick auf das gcc-Handbuch zeigt, dass es eine spezielle Option -Wfloat-equal gibt, die in dieser Situation verwendet werden kann.
Hier ist der Befehl mit dieser Option:

gcc -Wall -Wextra -Wfloat-equal test.c -o test
Nach dem Login kopieren

Hier ist die Ausgabe dieses Befehls:

test.c: In function ‘compare’:
test.c:5:10: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]
 if(x == y)
Nach dem Login kopieren

Wie Sie in der obigen Ausgabe sehen können, zwingt die Option -Wfloat-equal den gcc-Compiler dazu, eine Warnung im Zusammenhang mit Vergleichen von Gleitkommawerten zu generieren.

Hier ist, was das GCC-Handbuch zu dieser Option sagt:

Die Idee dahinter ist, dass es für Programmierer manchmal bequem ist, sich Gleitkommawerte als annähernd unendlich genaue reelle Zahlen vorzustellen. Wenn Sie dies tun, müssen Sie durch Profilierung des Codes oder auf andere Weise den maximalen oder möglichen maximalen Fehler ermitteln, der durch diese Berechnung entsteht, und dies dann beim Vergleich (und beim Erzeugen der Ausgabe, aber das ist etwas anderes) zulassen Frage) Fehler. Insbesondere sollten Sie nicht auf Gleichheit prüfen, sondern prüfen, ob die beiden Werte möglicherweise überlappende Bereiche haben. Dies geschieht mithilfe von Vergleichsoperatoren, sodass der Gleichheitsvergleich möglicherweise ein Fehler ist.

So verwalten Sie gcc-Befehlszeilenoptionen besser

如果在你使用的 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
Nach dem Login kopieren

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

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

Das obige ist der detaillierte Inhalt vonGCC-Befehle: Erschließung der endlosen Möglichkeiten der Linux-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ich kann mich nicht als Stamm bei MySQL anmelden Ich kann mich nicht als Stamm bei MySQL anmelden Apr 08, 2025 pm 04:54 PM

Die Hauptgründe, warum Sie sich bei MySQL nicht als Root anmelden können, sind Berechtigungsprobleme, Konfigurationsdateifehler, Kennwort inkonsistent, Socket -Dateiprobleme oder Firewall -Interception. Die Lösung umfasst: Überprüfen Sie, ob der Parameter Bind-Address in der Konfigurationsdatei korrekt konfiguriert ist. Überprüfen Sie, ob die Root -Benutzerberechtigungen geändert oder gelöscht und zurückgesetzt wurden. Stellen Sie sicher, dass das Passwort korrekt ist, einschließlich Fall- und Sonderzeichen. Überprüfen Sie die Einstellungen und Pfade der Socket -Dateiberechtigte. Überprüfen Sie, ob die Firewall Verbindungen zum MySQL -Server blockiert.

C Sprache Bedingte Zusammenstellung: Ein detaillierter Leitfaden für Anfänger zu praktischen Anwendungen C Sprache Bedingte Zusammenstellung: Ein detaillierter Leitfaden für Anfänger zu praktischen Anwendungen Apr 04, 2025 am 10:48 AM

C-Sprachbedingungskompilation ist ein Mechanismus zum selektiven Kompilieren von Codeblöcken, die auf Kompilierungszeitbedingungen basieren. Zu den Einführungsmethoden gehören: Verwenden von #IF- und #else -Direktiven, um Codeblöcke basierend auf den Bedingungen auszuwählen. Zu den häufig verwendeten bedingten Ausdrücken gehören STDC, _win32 und Linux. Praktischer Fall: Drucken Sie verschiedene Nachrichten entsprechend dem Betriebssystem. Verwenden Sie unterschiedliche Datentypen gemäß der Anzahl der Ziffern des Systems. Verschiedene Header -Dateien werden gemäß dem Compiler unterstützt. Die bedingte Kompilierung verbessert die Portabilität und Flexibilität des Codes und macht es an den Compiler-, Betriebssystem- und CPU -Architekturänderungen anpassbar.

【Rost-Selbststudie】 Einführung 【Rost-Selbststudie】 Einführung Apr 04, 2025 am 08:03 AM

1.0.1 Vorwort Dieses Projekt (einschließlich Code und Kommentare) wurde während meines Autodidakt-Rostes aufgezeichnet. Es kann ungenaue oder unklare Aussagen geben. Bitte entschuldigen Sie sich. Wenn Sie davon profitieren, ist es noch besser. 1.0.2 Warum ist Rustrust zuverlässig und effizient? Rost kann C und C mit ähnlicher Leistung, aber höherer Sicherheit ersetzen, und erfordert keine häufige Neukompilation, um auf Fehler wie C und C zu prüfen. Thread-Safe (stellen Sie sicher, dass Multi-Thread-Code vor der Ausführung sicher ist). Vermeiden Sie undefiniertes Verhalten (z. B. Array aus Grenzen, nicht initialisierte Variablen oder Zugriff auf den freien Speicher). Rust bietet moderne Sprachmerkmale wie Generika

Wie man MySQL löst, kann nicht gestartet werden Wie man MySQL löst, kann nicht gestartet werden Apr 08, 2025 pm 02:21 PM

Es gibt viele Gründe, warum MySQL Startup fehlschlägt und durch Überprüfung des Fehlerprotokolls diagnostiziert werden kann. Zu den allgemeinen Ursachen gehören Portkonflikte (prüfen Portbelegung und Änderung der Konfiguration), Berechtigungsprobleme (Überprüfen Sie den Dienst Ausführen von Benutzerberechtigungen), Konfigurationsdateifehler (Überprüfung der Parametereinstellungen), Datenverzeichniskorruption (Wiederherstellung von Daten oder Wiederaufbautabellenraum), InnoDB-Tabellenraumprobleme (prüfen IBDATA1-Dateien), Plug-in-Ladeversagen (Überprüfen Sie Fehlerprotokolle). Wenn Sie Probleme lösen, sollten Sie sie anhand des Fehlerprotokolls analysieren, die Hauptursache des Problems finden und die Gewohnheit entwickeln, Daten regelmäßig zu unterstützen, um Probleme zu verhindern und zu lösen.

Was sind die 5 grundlegenden Komponenten von Linux? Was sind die 5 grundlegenden Komponenten von Linux? Apr 06, 2025 am 12:05 AM

Die fünf grundlegenden Komponenten von Linux sind: 1. Der Kernel, Verwaltung von Hardware -Ressourcen; 2. Die Systembibliothek, die Funktionen und Dienste bereitstellt; 3. Shell, die Schnittstelle, in der Benutzer mit dem System interagieren können; 4. Das Dateisystem, das Daten speichert und organisiert; 5. Anwendungen, die Systemressourcen verwenden, um Funktionen zu implementieren.

Kann MySQL auf Android laufen? Kann MySQL auf Android laufen? Apr 08, 2025 pm 05:03 PM

MySQL kann nicht direkt auf Android ausgeführt werden, kann jedoch indirekt mit den folgenden Methoden implementiert werden: Die Verwendung der Leichtgewichtsdatenbank SQLite, die auf dem Android -System basiert, benötigt keinen separaten Server und verfügt über eine kleine Ressourcennutzung, die für Anwendungen für Mobilgeräte sehr geeignet ist. Stellen Sie sich remote eine Verbindung zum MySQL -Server her und stellen Sie über das Netzwerk zum Lesen und Schreiben von Daten über das Netzwerk eine Verbindung zur MySQL -Datenbank auf dem Remote -Server her. Es gibt jedoch Nachteile wie starke Netzwerkabhängigkeiten, Sicherheitsprobleme und Serverkosten.

Lösungen für die von MySQL auf einer bestimmten Systemversion gemeldeten Fehler Lösungen für die von MySQL auf einer bestimmten Systemversion gemeldeten Fehler Apr 08, 2025 am 11:54 AM

Die Lösung für den MySQL -Installationsfehler ist: 1. Überprüfen Sie die Systemumgebung sorgfältig, um sicherzustellen, dass die Anforderungen der MySQL -Abhängigkeitsbibliothek erfüllt werden. Unterschiedliche Betriebssysteme und Versionsanforderungen sind unterschiedlich. 2. Lesen Sie die Fehlermeldung sorgfältig durch und ergreifen Sie entsprechende Maßnahmen gemäß den Eingabeaufforderungen (z. B. fehlende Bibliotheksdateien oder unzureichende Berechtigungen), z. B. die Installation von Abhängigkeiten oder die Verwendung von SUDO -Befehlen; 3. Versuchen Sie bei Bedarf, den Quellcode zu installieren und das Kompilierungsprotokoll sorgfältig zu überprüfen. Dies erfordert jedoch eine bestimmte Menge an Linux -Kenntnissen und -erfahrung. Der Schlüssel zur letztendlichen Lösung des Problems besteht darin, die Systemumgebung und Fehlerinformationen sorgfältig zu überprüfen und auf die offiziellen Dokumente zu verweisen.

MySQL kann nach dem Herunterladen nicht installiert werden MySQL kann nach dem Herunterladen nicht installiert werden Apr 08, 2025 am 11:24 AM

Die Hauptgründe für den Fehler bei MySQL -Installationsfehlern sind: 1. Erlaubnisprobleme, Sie müssen als Administrator ausgeführt oder den Sudo -Befehl verwenden. 2. Die Abhängigkeiten fehlen, und Sie müssen relevante Entwicklungspakete installieren. 3. Portkonflikte müssen Sie das Programm schließen, das Port 3306 einnimmt, oder die Konfigurationsdatei ändern. 4. Das Installationspaket ist beschädigt. Sie müssen die Integrität herunterladen und überprüfen. 5. Die Umgebungsvariable ist falsch konfiguriert und die Umgebungsvariablen müssen korrekt entsprechend dem Betriebssystem konfiguriert werden. Lösen Sie diese Probleme und überprüfen Sie jeden Schritt sorgfältig, um MySQL erfolgreich zu installieren.

See all articles