代码有效:
#include <stdio.h>
char *arr[1] = {"Hello"};
int main()
{
printf("%s", arr[0]);
return 0;
}
但是,代码不起作用:
#include <stdio.h>
char *arr[1];
arr[0] = "Hello";
int main()
{
printf("%s", arr[0]);
return 0;
}
给出错误
警告:“arr”声明中的类型默认为“int”[-Wimplicit-int] main.c:4:1: 错误:‘arr’的类型冲突;有‘int[0]’
如何在函数之外进行赋值(即在头文件中)?
‘arr’声明中的类型默认为‘int’[-Wimplicit-int]
如何在函数之外进行赋值(即在头文件中)?
他们没有。可执行语句必须位于函数内部。
当编译器分析函数外部的代码时,它期望找到声明。所以它正在分析
arr[0] = "Hello";
,就好像它是一个声明一样。声明以某些说明符或限定符开头,例如 extern
表示存储类说明符,int
表示类型说明符,或 const
表示类型限定符。
在 C 的古代历史中,
int
被视为默认类型,因此,当编译器找不到它期望的说明符或限定符之一时,它会假定 int
作为默认类型。这不再是现代 C 标准的一部分,因此编译器会警告您。