Unterschiede C und C++ in Bezug auf main()
-
Ich habe ein paar Fragen, die ihr mir hoffentlich beantworten könnt. Sie beziehen sich alle auf den jeweiligen ANSI/ISO Standard.
1.) In C++ kann ich das return in der main() Methode weglassen, in C ist es Pflicht?
2.) Sowohl
int main()
, wie auch
int main(int, char**)
sind C und C++ standardkonform?
3.)
int main(int, char**, char**)
gehört nicht zum Standard und ist nur unter POSIX Systemen verfügbar?
-
1. Afaik kann man es in C auch weglassen (aber nagel mich nicht darauf fest)
2. Ja (die obere Version ignoriert Kommandozeilen-Parameter, bei der unteren kannst du über argc/argv auf die Parameterliste zugreifen)
3. Es ist auf jeden Fall eine nichtportable Erweiterung, allerdings weiß ich nicht, wer sie eingeführt hat - und wer sie unterstützt (der dritte Parameter dürfte die Environment-Variablen enthalten).
-
CStoll schrieb:
1. Afaik kann man es in C auch weglassen (aber nagel mich nicht darauf fest)
Jap, kann man.
3. Es ist auf jeden Fall eine nichtportable Erweiterung, allerdings weiß ich nicht, wer sie eingeführt hat - und wer sie unterstützt (der dritte Parameter dürfte die Environment-Variablen enthalten).
So ist es auch.
MfG
GPC
-
GPC schrieb:
3. Es ist auf jeden Fall eine nichtportable Erweiterung, allerdings weiß ich nicht, wer sie eingeführt hat - und wer sie unterstützt (der dritte Parameter dürfte die Environment-Variablen enthalten).
So ist es auch.
Das ist POSIX, also UNIX und Linux z.B.?!
Gut zu wissen, ich dachte immer das stammte von MS, denn die MS-Compiler können es auf jeden Fall:
MSDN schrieb:
{
program-statements
}Microsoft Specific —>
envp
A pointer to an array of environment strings. It can be declared as an array of pointers to char (char *envp[ ]) or as a pointer to pointers to char (char **envp). If your program uses wmain instead of main, use the wchar_t data type instead of char. The end of the array is indicated by a NULL pointer. The environment block passed to main and wmain is a “frozen„ copy of the current environment. If you subsequently change the environment via a call to putenv or _wputenv, the current environment (as returned by getenv/_wgetenv and the _environ/ _wenviron variable) will change, but the block pointed to by envp will not change. This argument is ANSI compatible in C, but not in C++.
END Microsoft Specific
-
GPC schrieb:
CStoll schrieb:
1. Afaik kann man es in C auch weglassen (aber nagel mich nicht darauf fest)
Jap, kann man.
Aber erst ab C99, bei C90 war das return noch zwingend vorgeschrieben.
-
Sgt. Nukem schrieb:
Das ist POSIX, also UNIX und Linux z.B.?!
Mein "So ist es auch" bezog sich auf die Funktion des Parameters als Environment-Variable. Wer sie eingeführt hat, keine Ahnung.
Dein Link legt aber nahe, dass es MS war.MfG
GPC
-
Das Zitat legt eher nahe, dass es in ANSI C legal ist.
Sgt. Nukem schrieb:
MSDN schrieb:
This argument is ANSI compatible in C, but not in C++.
-
kingruedi schrieb:
Das Zitat legt eher nahe, dass es in ANSI C legal ist.
Sgt. Nukem schrieb:
MSDN schrieb:
This argument is ANSI compatible in C, but not in C++.
irgendwie läuft's zur Zeit nicht...