void main(i)
{
printf("%d",i);
}
main(i)
在这里的含义是什么?它是如何工作的?CCD_ 2的值和类型是什么?
void main(i)
声明一个没有类型的函数参数只在旧的、过时的C90标准中有效。在C90中,i
将默认为类型int
。
如果此代码是用于独立实现(嵌入式系统或操作系统(,那么它在C90中是有效的。它将相当于void main (int i)
。您的编译器需要记录这种形式的main((应该做什么
如果此代码用于托管实现(在操作系统上运行的编程(,则它是无效的,不会编译。C90 2.1.2.2托管环境只允许两种形式的main((:
int main(void)
int main(int argc, char *argv[])
在较新的C标准中,无论是独立的还是托管的,代码都将无效,因为"默认为int"规则已从语言中删除。
它可能是int
类型的,表示在命令行上传递的参数数;包括程序的名称。
但您不应该像那样编写main
原型,因为程序行为在形式上是由实现定义的,因此可能因平台而异。
请改用int main(void)
或int main(int argc, char **argv)
。
首先,
void main(i)
{
printf("%d",i);
}
是C
中的无效语法,您不应该使用它,因为C
标准规定
案例1:[
C11
,§5.1.2.2.1],在托管环境中,main()
应返回int
- 它应采用0(
void
(或2(int argc, char*argv[]
或等效(自变量
案例2:在独立环境中,
- 它是无效的(根据最新标准(,因为
C
标准不再支持"默认为int
的变量类型"概念
- 它是无效的(根据最新标准(,因为
[这只是为了理解,在标准中不再支持,因此,行为不能得到保证。]
现在,说到上述代码的含义部分,在i
0中提供i
的定义是一种技巧和过时的方法,主要用于代码高尔夫球以缩短代码大小。i
的类型在这里默认为int
,并保存提供给程序的扩充数(包括程序名称(。
例如,如果程序像一样运行
./test
在程序中,i
最有可能具有值1
。