The C11 Standard declares that:
5.1.2.2.1 Program startup
The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of
int
and with no parameters:int main(void) { /* ... */ }
or with two parameters (referred to here as
argc
andargv
, though any names may be used, as they are local to the function in which they are declared):int main(int argc, char *argv[]) { /* ... */ }
or equivalent; 10), or in some other implementation-defined manner.
10) Thus, int can be replaced by a
typedef
name defined asint
, or the type ofargv
can be written aschar ** argv
, and so on.
We will ignore this part: or in some other implementation-defined manner. since I'm interested only in definitions equivalent to the two above examples.
Would this be a valid definition for main since char* a[4]
and char**
are equivalent:
int main(int argc, char* argv[4]){/*...*/}
How about a VLA array, we are assuming printf
will return a positive int value:
int main(int argc, char* argv[printf("Hello there!")]){/*...*/}
valid implies being supported by objective truth or generally accepted authority.
not based on truth or reason: The results of the experiment were said to be non-valid because of the inconsistent methodology employed.
a reason that most people would find acceptable or believable.
In effect, the validity of information is its relevance and appropriateness to your research question and the directness and strength of its association with the concepts under scrutiny. Often you will have to use best available information whose validity may be weak.
Yes, this is all covered by the "or equivalent". The footnote about renaming parameters or using typedef
ed types are just examples.
My favorite variant is
int main(int argc, char* argv[argc+1]){/*...*/}
because it has the most information about the semantic of all main
functions.
int main(int argc, char* argv[4]){/*...*/}
is a valid signature of main
. Compiler will ignore 4
in char argv[4]
and it is equivalent to char argv[] = char **argv
. Same goes with second signature.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With