【发布时间】:2015-09-09 03:19:13
【问题描述】:
C11 标准声明:
5.1.2.2.1 程序启动
程序启动时调用的函数名为main。实现没有声明这个函数的原型。它应使用
int的返回类型定义并且不带参数:int main(void) { /* ... */ }或带有两个参数(此处称为
argc和argv,尽管可以使用任何名称,因为它们是声明它们的函数的本地名称):int main(int argc, char *argv[]) { /* ... */ }或等价物; 10),或以其他一些实现定义的方式。
10) 因此,int 可以替换为定义为
int的typedef名称,或者argv的类型可以写为char ** argv,等等。
我们将忽略这部分:或以其他实现定义的方式。因为我只对与上述两个示例等效的定义感兴趣。
这是否是 main 的有效定义,因为 char* a[4] 和 char** 是等价的:
int main(int argc, char* argv[4]){/*...*/}
VLA 数组怎么样,我们假设printf 将返回一个正整数值:
int main(int argc, char* argv[printf("Hello there!")]){/*...*/}
【问题讨论】:
-
请注意,您引用的是托管实现部分。本节不包括独立的实现。
-
我想问一下
argv[static 4]是否也等同于这些会很有趣。 -
@GrzegorzSzpetkowski:是的,因为
static不会影响类型。当然,像const和restrict这样也可以这样使用的类型限定符会影响它。
标签: c standards language-lawyer c11