According to ISO/IEC 9899:1999, §5.1.2.2.1, p. 12, ¶2:
The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program, and retain their last-stored values between program startup and program termination.
Does this requirement imply that this is not a strictly conforming definition of main ?
int main(const int argc, const char * const * const argv) { /* ... */ }
Or is the requirement just a guarantee that the function won't be called in a manner that modifying data results in undefined behavior, such as this?
const int argsno = 1;
char *args[] = { "progname" /* String literal */ , (char *)0 };
main((int) argsno, args);
Note: in ISO/IEC 9899:2018 the quoted paragraph is found in §5.1.2.2.1, p. 11, ¶2.