C-C++关键字(一)

C/C++关键字(一)

1.1 (#)字符串化操作符

功能:将字符串转换为字符串字面量

用法:#操作符会将紧随其后的参数转换为一个带双引号的字符串

#include <stdio.h>
#define STR(x) #x
int main()
{
	printf("%s\n",STR(Hello World!));
	printf("%s\n",STR(123));
	return 0;
}

1.2(##)符号连接操作符

功能:将两个标记(Token)拼接为一个标记

用法:将它两边的宏参数拼接在一起

#include <stdio.h>
#define CONCAT(x,Y) ((x##y))

int main()
{
	int xy=100;
	printf("%d\n",CONCAT(x,y));将x,y拼接成xy,因此xy可以被正确解析
	return 0;
	
}

2.(volatile)关键字

2.1存储器映射的硬件寄存器

存储器映射的硬件寄存器通常加volatile,因为寄存器随时可以被外设硬件修改,当声明指向设备寄存器的指针时一定要用volatile,它会告诉编译器不要在这个地址的数据进行假设。

2.2中断服务程序中修改的变量

当中断服务程序(ISR)修改一个变量,主程序肯在等待该变量的改变。在这种情况下,使用volatile避免主程序读取优化后的缓存值,确保从内存中获取最新值。

2.3多线程中共享的变量

在多线程环境中,不同线程可能会访问或修改同一个变量。volatile确保每个线程都能读取到变量的最新值,而不是被优化后的缓存值。

3.关键字static的作用

3.1在函数体内定义的静态变量

在函数体,指挥被初始化一次,一个被声明为静态的变量在这一函数被调用的过程中维持其值不变。静态变量具有静态的存储周期,只会被初始化一次,且在函数调用结束后其值不会丢失,而是保持到下一次函数调用。

3.2在模块内定义静态变量

当在函数体外(即全局作用域)使用static时,变量的作用域被限制在当前文件,不能被其他文件中的代码访问。这种变量成为局部全局变量。

在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它的函数访问。他是一个本地的全局变量(只能被当前文件使用)。

3.3在模块内定义的静态函数

当在函数体外(即全局作用域)使用static时,函数的作用域被限制在当前文件,不能被其他文件中的代码访问。这种变量成为静态函数。

在模块内,一个被声明为静态函数可以被模块内所有函数访问,但不能被模块外其它的函数访问。

4.关键字extern的作用

extern "C"主要是为了在C++中调用C语言的代码

5.const关键字

5.1定义变量为常量

局部变量或全局变量,可以通过const来定义为常量,一旦赋值后,该常量的值就不能被修改

5.2修饰函数的参数

使用const修饰函数的参数,表示该参数在函数体内不能修改。这样可以保证函数不会无意间修改传入的参数值,增加代码的可维护性

5.3返回普通类型并用const修饰

当函数返回指针时,若用const修饰返回值类型,那么返回的指针所指向的数据内容不能被修改,同时该指针也只能赋值给被const修饰的指针

如果const用于修饰普通类型的返回值,如int,由于返回值是临时的副本,在函数调用结束后,返回值的声明周期也随之结束,因此将其修饰为const是没有意义的

5.4节省空间,避免不必要的内存分配

const关键字还可以帮助优化内存管理,当你使用const来定义常量时,编译器会考虑将将常量放入只读存储区,避免了额外的内存分配

posted @ 2025-08-15 22:08  骗人就变小狗  阅读(9)  评论(0)    收藏  举报