Ist dies eine gültige Definition für main ()?

8

Der C11-Standard erklärt Folgendes:

  

5.1.2.2.1 Programmstart

     
  1. Die beim Programmstart aufgerufene Funktion heißt main. Die Implementierung deklariert keinen Prototyp für diese Funktion. Es sollte mit einem Rückgabetyp von int und ohne Parameter definiert werden:

    %Vor%      

    oder mit zwei Parametern (die hier als argc und argv bezeichnet werden, obwohl alle Namen verwendet werden können, da sie für die Funktion, in der sie deklariert sind, lokal sind):

    %Vor%      

    oder gleichwertig; 10 oder in einer anderen von der Implementierung definierten Weise.

  2.   

10) Somit kann int durch einen typedef name ersetzt werden, der als int definiert ist, oder der Typ von argv kann als char ** argv usw. geschrieben werden / p>

Wir werden diesen Teil ignorieren: oder in einer anderen implementationsdefinierten Weise. da ich nur an Definitionen interessiert bin, die den beiden obigen Beispielen entsprechen.

Wäre dies eine gültige Definition für main, da char* a[4] und char** gleichwertig sind:

%Vor%

Wie wäre es mit einem VLA-Array? Wir nehmen an, dass printf einen positiven int-Wert zurückgibt:

%Vor%     
this 23.06.2015, 10:54
quelle

2 Antworten

5

Ja, das alles wird durch das "oder Äquivalent" abgedeckt. Die Fußnote zum Umbenennen von Parametern oder zum Verwenden von typedef ed-Typen sind nur Beispiele.

Meine Lieblingsvariante ist

%Vor%

weil es die meisten Informationen über die Semantik aller main -Funktionen enthält.

    
Jens Gustedt 23.06.2015 11:02
quelle
2
%Vor%

ist eine gültige Signatur von main . Der Compiler ignoriert 4 in char argv[4] und entspricht char argv[] = char **argv . Gleiches gilt für die zweite Signatur.

    
haccks 23.06.2015 11:02
quelle

Tags und Links