Wo ist der beste Ort, um das #ifdef __cplusplus extern "C" {#endif

7

Ich würde gerne wissen, wo es besser ist, das

zu setzen %Vor%

in einer C-Header-Datei.

Am Anfang oder nach all den anderen beinhaltet. Warum?

    
Vincent 18.04.2013, 15:44
quelle

4 Antworten

9

Es gibt keine strengen Regeln dafür, aber beachten Sie Folgendes.

  1. Das allgemeine Prinzip ist, dass jede Header-Datei für sich selbst sorgt (und autark ist). Nach diesem Prinzip wäre es nicht notwendig, die Header-Dateien in ein externes "C" zu schreiben, da die Header-Dateien ein externes "C" enthalten würden (falls sie eines brauchen). Also, in der aktuellen Datei würden Sie es nach dem anderen einfügen.
  2. Aber wenn Sie eine ganze Reihe von Headern haben, denen Sie kein externes "C" hinzufügen möchten und die Sie durch ein einzelnes Include verfügbar machen wollen, gehen Sie weiter und schließen Sie sie ab in einer Datei weit außen "C".

Wissen Sie einfach, dass die Idee hinter extern "C" darin besteht, dass der Compiler eine C-freundliche Verknüpfung erzeugt. Andernfalls sucht Code, der mit einem C ++ - Compiler kompiliert wurde, nach veralteten Namen, mit denen in Archiven, die mit einem C-Compiler kompiliert wurden, verknüpft werden, und kann sie nicht finden.

    
Ziffusion 18.04.2013, 15:58
quelle
9

Dieses Konstrukt wird verwendet, um Ihre Namen für einen C-Linker (kurze Erklärung) verfügbar zu machen

Sie wollen es offensichtlich nur um Ihre Sachen herum verwenden.

So:

%Vor%     
Offirmo 18.04.2013 15:47
quelle
1

extern "C" beeinflusst die Art und Weise, wie Code kompiliert wird. Header, die entworfen sind, um sowohl als C als auch als C ++ kompiliert zu werden, verwalten extern "C" selbst. Sie sollten nie eine #include -Direktive in einen extern "C" -Block einbinden: Wenn der betreffende Header so kompiliert wurde, dass Ihre Direktive redundant ist und wenn er nicht für beide gedacht war wie es ein Fehler ist.

    
Pete Becker 18.04.2013 15:52
quelle
1
  • extern "C" wirkt sich auf die Verknüpfung aus. Wenn C ++ - Funktionen kompiliert werden, haben sie unterschiedliche Namen, weshalb das Überladen in C ++ möglich ist. Daher wird der Funktionsname basierend auf den Typen und der Anzahl der Parameter geändert, sodass zwei Funktionen mit demselben Namen zwei verschiedene Symbolnamen haben.

  • Code in einem externen "C" ist immer noch C ++ - Code. Es gibt Einschränkungen, was Sie in einem externen "C" -Block tun können, aber es geht immer um die Verknüpfung.

SD. 04.10.2013 09:33
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ qstntxt ___

Ich habe kürzlich getopts benutzt und ich habe alles eingerichtet. Ich habe ein Problem. Ich möchte, dass es funktioniert, damit jemand, der kein Argument in die Befehlszeile eingibt, den Hilfetext erhält, z. B .:

%Vor%

Folgendes habe ich im Moment.

%Vor%     
___ answer16120659 ___

Bestätigen Sie die Benutzereingabe mit einem if-Test wie unten.

Die Option %code% von %code% gibt true zurück, wenn die Länge der Zeichenfolge, die auf -z folgt, null ist.

%Vor%     
___ tag123linux ___ LINUX FRAGEN MÜSSEN PROGRAMMIEREN VERWANDT SEIN. Verwenden Sie dieses Tag nur dann, wenn sich Ihre Frage auf das Programmieren mit Linux-APIs oder das Linux-spezifische Verhalten bezieht, nicht nur, weil Sie Ihren Code unter Linux ausführen. Wenn Sie Linux-Unterstützung benötigen, können Sie https://unix.stackexchange.com oder https://askubuntu.com ausprobieren ___ answer16120635 ___

Versuchen Sie es in Ihrem Skript:

%Vor%

Die Codezeile ist die verkürzte boolesche Version von

%Vor%

%code% sind alle Argumente des Skripts

%Vor%

ist eine Abkürzung für

%Vor%

Siehe Ссылка

    
___ answer16120940 ___

Gilles Quenots Antwort funktioniert großartig und ist sehr prägnant; Wenn Sie nach Lösungen suchen, die die Absicht ausdrücklicher zum Ausdruck bringen , können Sie diese versuchen, die auf der Anzahl der Parameter %code% :

basieren %Vor%

Alternativ, mit arithmetischen Ausdrücken:

%Vor%

Schließlich, eine Kurzschrift, die darauf beruht, dass 0 als falsch ausgewertet wird, und jede Zahl ungleich Null als wahr gilt:

%Vor%

William Purklell bietet eine weitere Variante, die deskriptiv und POSIX-konform ist:

%Vor%

%code% / %code% ist ein POSIX-Dienstprogramm / eingebaut, während die ähnliche %code% Bedingung %code% -spezifisch ist (wie auch %code% ).
Im Allgemeinen bietet %code% s %code% jedoch mehr Funktionen und weniger Überraschungen als %code% / %code% .

    
___ tag123bash ___ Für Fragen zu Skripten, die für die Bash-Befehlsshell geschrieben wurden. Für Shell-Skripte mit Fehlern, überprüfen Sie diese bitte mit dem Shellcheck-Programm (oder im web-Shellcheck-Server unter https://shellcheck.net), bevor Sie hier posten. Fragen zur interaktiven Nutzung von Bash sind bei Super Usern eher Thema als bei Stack Overflow. ___