十四、常用关键字(const,typedef,static,extern,#define)
一、const(修饰常变量)
//const 修饰的常变量 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { const float pai = 3.14f; //这里的pai是const修饰的常变量 pai = 5.14;//是不能直接修改的! return 0; }
二、typedef(类型重定义)
// typedef 类型定义, 类型重定义 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> typedef unsigned int U_INT; // 将 unsigned int 重命名位 U_INT int main() { U_INT f = 30; printf("f = %d\n", f); // f = 30 return 0; }
三、static(静态变量)
static是用来修饰变量和函数的1. 修饰局部变量-称为静态局部变量2. 修饰全局变量-称为静态全局变量3. 修饰函数-称为静态函数
3.1 修饰局部变量
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> void test() { //static修饰局部变量 static int i = 0; i++; printf("%d ", i); // 1 2 3 4 5 6 7 8 9 10 } int main() { int i = 0; for (i = 0; i<10; i++) { test(); } return 0; }
3.2 修饰全局变量
//代码1 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //add.c int g_val = 2018; //test.c int main() { printf("%d\n", g_val); return 0; }//代码2 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //add.c static int g_val = 2018; //test.c int main() { printf("%d\n", g_val); return 0; }
代码1正常,代码2在编译的时候会出现连接性错误。一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
3.3 修饰函数
//代码1 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //add.c int Add(int x, int y) { return c+y; } //test.c int main() { printf("%d\n", Add(2, 3)); return 0; }//代码2 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //add.c static int Add(int x, int y) { return c+y; } //test.c int main() { printf("%d\n", Add(2, 3)); return 0; }代码1正常,代码2在编译的时候会出现连接性错误一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
四、extern(外部变量)
// add.c int g_val = 2021; // 全局变量 static int g_val_l = 2022; // static 修饰全部变量#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { // extern 声明外部符号 与 static 声明全局变量 extern int g_val; // 在add.c中声明就可以在这里使用 extern int g_val_l; // 在 add.c中用 static 修饰了全局变量, // 改变了变量的作用域。 让静态的全局变量只能在自己所在的源文件内部使用, 除了源文件就不能再使用了 printf("g_val = %d\n", g_val); // printf("g_val_l = %d\n", g_val_l); 报错 return 0; }
五、#define(宏定义)
//define定义标识符常量 #define MAX 1000 //define定义宏 #define ADD(x, y) ((x)+(y)) #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int sum = ADD(2, 3); printf("sum = %d\n", sum); // sum = 5 sum = 10 * ADD(2, 3); printf("sum = %d\n", sum); // sum = 50 return 0; }