c++ - How is `int main(int argc, char* argv<::>)` a valid signature of main? -
this question has answer here:
i've seen in site int main(int argc, char* argv<::>) can used signature of main. surprisingly, following program:
int main(int argc, char* argv<::>) { return 0; } compiles withput warnings in gcc , clang. compiles in c++.
so, how int main(int argc, char* argv<::>) valid signature of main?
char* argv<::> equivalent char* argv[]. <: , :> used here digraphs.
c11: 6.4.6 (p3):
in aspects of language, 6 tokens79)
<: :> <% %> %: %:%:behave, respectively, same 6 tokens
[ ] { } # ##except spelling. 80)
foot note:
79) these tokens called ‘‘digraphs’’.
80) [ , <: behave differently when ‘‘stringized’’ (see 6.10.3.2), can otherwise freely interchanged.
an example:
%: define stringize(a) printf("digraph \"%s\" retains spelling in case of stringization.\n", %:a) calling above macro
stringize( %:); will print
digraph "%:" retains spelling in case of stringization.
Comments
Post a Comment