In C, ist int main(int argc, char *argv[])
wirklich erforderlich, um Programmargumente zu erhalten? Mit anderen Worten, ist es beim Definieren der Hauptfunktion mit der Signatur int main(void)
möglich, die Programmargumente nur mit POSIX-Schnittstellen wiederherzustellen?Kann in POSIX ein Main (void) Befehlszeilenargumente wiederherstellen?
Ich fühle mich wie ich etwas fehle, zu sehen, dass:
- POSIX mehrere Schnittstellen definiert andere prozessspezifische Informationen abzurufen. Zum Beispiel gibt es Schnittstellen für Umgebungsvariablen (die wahrscheinlich von C99 geerbt wurden, aber auch um Funktionen wie
unsetenv()
erweitert wurden) und Host-Identifikation (gethostid()
). - Bestimmte Betriebssysteme definieren "globale" Möglichkeiten zum Abrufen der Befehlszeilenargumente. Beispielsweise stellt Windows die Funktionen
GetCommandLineW
undCommandLineToArgvW
bereit, und HP-UX stellt die globalen Variablen__argc_value
und__argv_value
bereit. Linux hat/proc/self/cmdline
, die inargv
undargc
geparst werden können.
Ich würde sagen, es ist die Implementierung definiert. –
Betrachten Sie eine Funktion 'int f (void)'. Wie greifen Sie auf alle Argumente zu, die Sie vom Aufrufer an die Funktion übergeben haben? – Olaf
In Bezug auf Windows ist zu beachten, dass Windows eine [vollständig von der Implementierung definierte Methode zur Definition von main] verwendet (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633559%28v=vs.85%29. aspx), was die Notwendigkeit erklären könnte, Befehlszeilenargumente durch separate Nicht-Standard-API-Funktionen zu erhalten. – Lundin