main函数外的赋值
-
main函数之前是用来声明和定义全局变量和函数的,并由编译器进行预处理,给那些全局变量和定义的函数分配内存和地址,不能设计可执行代码。
-
编译器在编译阶段(预处理、编译、汇编、链接)对main函数之前的全局变量进行内存分配,对定义的函数生成可执行的代码,并保留该函数的地址以供main函数调用,而赋值语句操作是一句可执行代码,又没有类似函数指针的东西供main函数调用,所以只能放在main函数内部进行顺序执行。
-
变量定义时省略类型
-
全局变量省略类型,默认为int(出现Warning)
-
示例:
int i; i = 10; // int类型 j = 10.9; // int类型 int main(int argc, char *argv[]) { printf("sizeof(i)=%lu\n", sizeof(i)); // 4 printf("sizeof(j)=%lu\n", sizeof(j)); // 4 printf("%d\n", i); // 10 return 0; }
-
-
无链接的局部变量省略类型,报错
-
示例:
int main(int argc, char *argv[]) { i = 10; // 报错,无法通过编译 printf("sizeof(i)=%lu\n", sizeof(i)); printf("%d\n", i); return 0; }
-
-
内部链接的局部变量(用static修饰的)省略类型,默认为int(出现Warning)
-
示例:
int main(int argc, char *argv[]) { static i = 10; // int类型 printf("sizeof(i)=%lu\n", sizeof(i)); // 4 printf("%d\n", i); // 10 return 0; }
-
-
-
在main函数外不能对变量赋值,只能进行定义或初始化
-
编译器会自动将定义和第一次赋值,合并为初始化
-
示例1:
double i; i = 10; // 报错,合并时类型不匹配
-
示例2:
int a; a = 10; // Warning,提示使用默认类型int
-
示例3:
int a; a = 10; a = 20; // 报错,不允许赋值操作
-