为什么这段代码在C语言中可以编译成功,而在C++中会报错?
int main;
在托管环境中,它是否符合标准?你能引用标准吗?
我已经使用gcc进行了测试。
main()
实现为函数,则它不符合规范,因此标准对其没有任何要求,因此它本质上会引发 UB,因此它不必运行。但是,它可能会基于实际和常见的实现细节进行编译,但这与我在答案中解释的相同。 - user529758int main() { /* ... */ }
和int main(int argc, char* argv[]) { /* ... */ }
在后一种形式中,argc应该是从程序运行环境中传递给程序的参数数量。如果argc非零,则这些参数应作为指向以null结尾的多字节字符串(NTMBS)的初始字符的指针通过argv[0]到argv[argc-1]提供,并且argv[0]应该是表示用于调用程序的名称或""的NTMBS的初始字符的指针。argc的值应该是非负数。argv[argc]的值应该是0. [注意:建议在argv之后添加任何进一步的(可选)参数。]
程序中不得使用函数main(3.2)。函数main的连接(3.5)为3,实现定义。声明main为内联或静态的程序是非法的。否则,名称main未保留。[示例:成员函数、类和枚举可以被称为main,其他命名空间中的实体也可以这样。]
int main;
不符合上述规定(“所有实现都应允许以下两种main的定义”,“程序内不得使用函数main(3.2)”)。
gcc -Wall -Werror <file.c>
您将会得到警告被视为错误:
main is usually a function name
-Wall
编译,这样您就可以看到所有的警告信息。是的,它是有效的。
它声明了一个名为main
的整数。