3 Stimmen

Warum verwendet GCC keine builtins im strict mode?

GCC deaktiviert eine Vielzahl von Builtins wenn sie im strengen Modus laufen -std=c... .

Außerhalb des strengen ISO-C-Modus (-ansi, -std=c90, -std=c99 oder -std=c11) sind die Funktionen _exit, alloca, bcmp, bzero ... stpcpy, ... als integrierte Funktionen behandelt werden. eingebaute Funktionen behandelt werden. Alle diese Funktionen haben entsprechende Versionen mit dem Präfix _ eingebautes die auch im strengen C90-Modus verwendet werden kann.

Gibt es dafür einen Grund? Sind die Buildins nicht konform? Oder liegt das daran, dass der Standard besagt, dass beim Aufruf von memcpy sollte es eigentlich heißen, dass ich nicht optimiert werden kann?

Ich fühle mich wie mein Code könnte dann definitiv schneller laufen, wenn ich es neu kompiliert mit -std=gnu* weil es einige mehr ermöglichen würde Optimierungen

GCC erzeugt normalerweise speziellen Code, um bestimmte eingebaute Funktionen effizienter zu handhaben; zum Beispiel können Aufrufe von alloca zu einzelne Anweisungen werden, die den Stack direkt anpassen, und Aufrufe von memcpy können zu Inline-Kopierschleifen werden

5voto

Fred Foo Punkte 341230

Keine der _exit , alloca , bcmp , bzero , stpcpy oder eine der anderen Funktionen in dieser Liste sind im C-Standard definiert und sollten daher nicht von einem konformen C-Compiler definiert werden; diese Namen müssen dem Benutzer für seine eigenen Bezeichner zur Verfügung stehen.

Beachten Sie, dass viele andere Built-Ins auch im strengen ISO-Modus aktiviert sind. Z.B., memcpy wird "als [eine] eingebaute [Funktion] anerkannt, es sei denn -fno-builtin angegeben ist"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X