C语言关键字static extern const
作者:互联网
一.关键字static
有三个作用:隐藏性,记忆性,初始化为0.
具有隐藏的作用:
当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。
a.c:
1 char a = 'A'; // global variable 2 void msg() 3 { 4 printf("Hello\n"); 5 }
main.c:
1 int main( void) 2 { 3 extern char a; // extern variable must be declared before use 4 printf("%c ", a); 5 ( void)msg(); 6 return 0; 7 }
程序的运行结果是:
A Hello
在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性。
保持变量内容的持久:
变量不加 static 修饰
1 #include <stdio.h> 2 3 void test() 4 { 5 int num = 0; 6 num++; 7 printf("%d ", num); 8 } 9 int main() 10 { 11 int i = 0; 12 for (i = 0; i < 10; i++) 13 { 14 test(); 15 } 16 return 0; 17 }
输出:1 1 1 1 1 1 1 1 1 1 1
变量被 static 修饰
1 #include <stdio.h> 2 3 void test() 4 { 5 static int num = 0; 6 num++; 7 printf("%d ", num); 8 } 9 int main() 10 { 11 int i = 0; 12 for (i = 0; i < 10; i++) 13 { 14 test(); 15 } 16 return 0; 17 }
输出:1 2 3 4 5 6 7 8 9 10
默认初始化为0:
1 static int x; //初始化时x=0;
二.关键字extern
引用同一个文件中的变量:变量的调用在变量声明的前面。
1 #include<stdio.h> 2 3 int func(); 4 5 int main() 6 { 7 func(); //1 8 extern int num; 9 printf("%d",num); //2 10 return 0; 11 } 12 13 int num = 3; 14 15 int func() 16 { 17 printf("%d\n",num); 18 }
引用另一个文件中的变量和函数:这个变量应该是全局的。
b.c:
1 char a = 'A'; // global variable 2 void msg() 3 { 4 printf("Hello\n"); 5 }
main.c
1 int main( void) 2 { 3 extern char a; // extern variable must be declared before use 4 printf("%c ", a); 5 ( void)msg(); 6 return 0; 7 }
三.关键字const
在定义该const变量时,需先初始化,以后就没有机会改变他了。
const修饰一般变量的时候:
1 int const number =2 或者 const int number = 2;
const 修饰函数的参数:
1 void StringCopy(char *strDestination, const char *strSource);
给strSource 加上const修饰后,如果函数体内的语句试图改动strSource 的内容,编译器将指出错误。
canst修饰指针:
规则:const离谁近,谁就不能被修改;
1 2 int a = 5; 3 4 // 第一种 5 const int *p1; // p本身不是cosnt的,而p指向的变量是const的 6 // 第二种 7 int const *p2; // p本身不是cosnt的,而p指向的变量是const的 8 9 10 // 第三种 11 int * const p3; // p本身是cosnt的,p指向的变量不是const的 12 // 第四种 13 const int * const p4;// p本身是cosnt的,p指向的变量也是const的 14 15 *p1 = 3; // error: assignment of read-only location ‘*p1’ 16 p1 = &a; // 编译无错误无警告 17 18 *p2 = 5; // error: assignment of read-only location ‘*p2’ 19 p2 = &a; // 编译无错误无警告 20 21 *p3 = 5; // 编译无错误无警告 22 p3 = &a; // error: assignment of read-only variable ‘p3’ 23 24 p4 = &a; // error: assignment of read-only variable ‘p4’ 25 *p4 = 5; // error: assignment of read-only location ‘*p4’ 26 27
参考链接:
https://blog.csdn.net/weixin_49303682/article/details/118643958
https://blog.csdn.net/weixin_49303682/article/details/118652834
https://blog.csdn.net/weixin_49303682/article/details/118653208
标签:const,变量,int,void,num,static,extern,main 来源: https://www.cnblogs.com/xiaogudexuexibiji/p/16350277.html