C语言的非法与合法

一个法官用老法律判案,必然荒唐。

C语言教程中,存在许多类似的问题,因为它们参考的还是ANSI C(通常叫C89)

现在有C99和C11,怎么办?

例子:变量声明不再必须放在前面;

例子:定义数组[元素个数]必须是可转换为整型的、大于0的编译时常量的表达式。

void arrayBasic(void){
	int arr [ 5 ]={1,2,3,4,5};	//定义并初始化
	int sum=0;
	for(int i=0;i<sizeof(arr)/ sizeof(int);i++){
		sum +=arr[i];
		printf("arr[%d]=%d ",i,arr[i]);
	}
	printf("\nsum of arr= %d\n",sum);

	//定义时[元素个数]必须是可转换为整型的、大于0的编译时常量。
	int a2[1+2*3];//常量表达式
	//a2 = {1,2,3};  //Invalid expression

	int a3[(int)4.6];
	int a4[Size];//符号常量

	const int size=10;
	int a5[size];//命名常量
	int n =8;
	int a6[n];//C99标准,变长数组

	//int b1[0];//an invalid array size
	//int b2[-2];
	int b3[2.3];//不知道那个标准
	int b4[n+1];

	//初始化
	int arr3[5]={[2]=3};
	//int arr4[]={1,2,3,4,5};
	for(int i=0;i<5;i++){
		printf("arr[%d]=%d ",i,arr3[i]);
	}
	printf("\n");

}


你可能感兴趣的:(C语言的非法与合法)