In C, è necessario il int main(int argc, char *argv[])
per ricevere gli argomenti del programma? In altre parole, quando si definisce la funzione principale con la firma int main(void)
, è possibile recuperare gli argomenti del programma utilizzando solo interfacce POSIX?In POSIX, un main (void) può recuperare gli argomenti della riga di comando?
Mi sento come se mi manca qualcosa, visto che:
- POSIX definisce interfacce multiple per recuperare altre informazioni specifiche del processo. Ad esempio, esistono interfacce per variabili di ambiente (probabilmente ereditate da C99, ma anche estese con funzioni come
unsetenv()
) e identificazione dell'host (gethostid()
). - Sistemi operativi specifici definiscono metodi "globali" per recuperare gli argomenti della riga di comando. Ad esempio, Windows fornisce le funzioni
GetCommandLineW
eCommandLineToArgvW
e HP-UX fornisce le variabili globali__argc_value
e__argv_value
. Linux ha/proc/self/cmdline
, che può essere analizzato inargv
eargc
.
Direi che è stata definita l'implementazione. –
Considera una funzione 'int f (void)'. Come si accede agli argomenti passati alla funzione dal chiamante? – Olaf
Per quanto riguarda Windows, si noti che Windows utilizza un [modo completamente definito dall'implementazione per definire il main] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633559%28v=vs.85%29. aspx), che potrebbe spiegare la necessità di ottenere argomenti dalla riga di comando tramite funzioni API non standard separate. – Lundin