Es gibt keine strengen Regeln dafür, aber beachten Sie Folgendes.
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.
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.
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.
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%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%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 Ссылка
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% .