Uno dovrebbe rispettare gli standard ovunque sia pratico. Così, non scrivere
void main
che non è mai stato valido C o C++, ma invece scrivere
int main
Con questo, il codice può essere compilato con per esempio g ++ (con le normali opzioni del compilatore).
Dato il void main
, ho il sospetto che un ambiente Windows. E comunque, per supportare l'uso del tuo programma in ambiente Windows, non dovresti usare gli argomenti main
in Windows. Funzionano in * nix perché sono stati progettati in e per quell'ambiente; non funzionano in generale in Windows, perché per impostazione predefinita (con convenzione molto forte) sono codificati come ANSI di Windows, il che significa che non possono codificare i nomi di file con caratteri esterni alle impostazioni locali dell'utente.
Quindi per Windows è meglio utilizzare la funzione GetCommandLine
API e la sua funzione di analisi sorella. Per la portabilità questo dovrebbe essere meglio incapsulato in alcuni moduli della riga di comando. Quindi è necessario affrontare il problema interessante dell'utilizzo di wchar_t
in Windows e char
in * nix & hellip;
In ogni caso, non sono sicuro dell'API * nix corrispondente, o anche se ce n'è uno, ma lo google. Nel peggiore dei casi, per * nix puoi sempre inizializzare un modulo per gli argomenti della riga di comando da main
. La bruttezza di * nix deriva direttamente dalla necessità di supportare la portabilità con il costrutto più specifico del SO, non specifico del C++, cioè lo standard main
.
fonte
2012-10-12 16:16:45
Sono pienamente d'accordo con 'int main' su' void main'. Tuttavia, l'altro commento mi lascia ... confuso. Quale sistema diverso da Windows ha un problema con la convenzione C++ standard per 'main()'? Non ne sono a conoscenza, quindi il castigating della convenzione standard come 'non-portatile' e 'OS-specifico' sembra OTT. –
@JonathanLeffler: Non sono a conoscenza di alcun sistema comunemente utilizzato diverso da Windows in cui gli argomenti 'main' non funzionano (tranne che per il testo ASCII puro dell'alfabeto inglese). Tuttavia, una funzionalità che non funziona in Windows ** è ** non portabile, e una funzionalità progettata per Unix-land ** è ** specifica per il sistema operativo. E la convenzione degli argomenti 'main' non funziona in Windows (cioè non è portabile), ed è progettata per Unix-land (cioè specifico per OS), e questi due aspetti sono fortemente connessi. Non c'è assolutamente nulla di divertente in questo. Posso solo pensare a brutte ragioni politiche per la sua persistenza. –