Jump to content
  • Hello visitors, welcome to the Hacker World Forum!

    Red Team 1949  (formerly CHT Attack and Defense Team) In this rapidly changing Internet era, we maintain our original intention and create the best community to jointly exchange network technologies. You can obtain hacker attack and defense skills and knowledge in the forum, or you can join our Telegram communication group to discuss and communicate in real time. All kinds of advertisements are prohibited in the forum. Please register as a registered user to check our usage and privacy policy. Thank you for your cooperation.

    TheHackerWorld Official

C语言-关键字

 Share


NedK7

Recommended Posts

 

auto

变量的作用域:

  • 变量可以作用的范围。一般都是花括号里面。

变量的生命周期:

  • 变量从被创建到销毁所经历的时间。

可以认为局部变量都默认是auto的,但是你不写编译器也知道。该关键字几乎不用了。

register

当你使用register去修饰一个变量时,编译器会尽可能将该变量放在CPU的寄存器中而非内存中,所以CPU访问该变量的速度是很快的。
几点注意:

  • 1,register修饰的最好是局部变量。因为全局变量会一直占用寄存器。
  • 2,不会被写入。写入就要写回内存。那么该变量设为register就没有意义。
  • 最好是高频读写的。
  • 无法被&符号取地址。
  • 不要被大量使用,因为寄存器有限。

为什么要有头文件

很多时候我们有这样的需求:在一个源文件中使用另一个源文件的函数或者变量。那么能不能直接使用呢?

  • 函数可以,但是会警告,函数只要链接找到就可以。(只限于自己写的函数,想要使用库函数或者别的函数必须包含声明)。
  • 而变量必须声明过才可以使用,且不能在声明的时候赋值。因为声明不开辟空间。

但是如果我有100个源文件,每个源文件都要使用同一个全局变量,那么怎么办呢?我难道要写100遍声明吗?

所以,一个好的处理方法就是,将这些声明提取到1个共用的文件中,以便于项目的维护。而这个文件就是头文件。而每个想要使用其中变量或者函数的源文件,只需要包含该头文件即可。

  • 头文件包含的内容:
    头文件包含

static

我们知道了全局变量和函数是可以跨文件的。而函数甚至不用声明就可以使用。那么有没有办法保证你的函数无法直接被其他源文件使用呢?

  • static修饰全局变量,表示该变量只能在源文件内部使用。改变了该变量的作用域。但是可以间接使用。
  • static修饰函数,表示该函数只能在该源文件内部使用。但是可以嵌套式的间接使用。
  • static的特性为C语言提供了封装性的可能。保证了项目的安全性。
/************* test.c文件 ***************/
static int g_val = 100;  //g_val无法被外部文件直接访问。因为static
int show_val() {
	printf("%d\n", g_val); //但是可以通过show函数访问;因为show函数可以被其他源文件访问
}

static void test(){ //被static修饰,无法被外部直接访问
 // do something...
}
void show_test(){
	test(); //但是可以通过嵌套,间接访问
}
  • static修饰局部变量,该变量的生命周期

extern

  • 在变量前面,表示声明该变量。全局变量声明必须带上extern,否则就可能引起编译器的二义性。不带上无法分辨是定义还是声明。
  • 函数可以不带,因为编译器可以分辨出函数的定义和声明,但是为了保持好习惯,建议带上。
    extern
Link to post
Link to comment
Share on other sites

 Share

discussion group

discussion group

    You don't have permission to chat.
    • Recently Browsing   0 members

      • No registered users viewing this page.
    ×
    ×
    • Create New...