Vickate_c/c++里面关键字的作用
2022-02-09 本文已影响0人
Vickate
static
- 隐藏与隔离的作用
如果我们希望全局变量仅限于在本源文件中使用,在其他源文件中不能引用,也就是说限制其作用域只在定义该变量的源文件内有效,而在同一源程序的其他源文件中不能使用。这时,就可以通过在全局变量之前加上关键字 static 来实现,使全局变量被定义成为一个静态全局变量。这样就可以避免在其他源文件中引起的错误。也就起到了对其他源文件进行隐藏与隔离错误的作用,有利于模块化程序设计。
- 保持变量的持久性
/// 使用静态局部变量最好的示例就是实现统计次数的功能
#include <stdio.h>
void count();
int main(void) {
int i=0;
for (i =0;i <=60;i++) {
count();
}
return 0;
}
void count() {
/*声明一个静态局部变量*/
static int num;
num++;
printf("%d\n",num);
}
因为静态局部变量是在编译时赋初值的,且只赋初值一次,在程序运行时它已有初值。以后在每次调用函数时就不再重新赋初值,而是保留上次函数调用结束时的值。
const
/// 类似使用方式
const string Language = "oc";
使用 const 关键字来声明某个常量字段或常量局部变量。 常量字段和常量局部变量不是变量并且不能修改。 常量可以为数字、布尔值、字符串或 null 引用。
extern
如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。
/// 类似使用方式
extern NSString *const GCDAsyncSocketException;
abstract
abstract可以修饰方法、类。使用abstract修饰的方法和类分别叫做抽象方法和抽象类。
inline
inline是C++关键字,在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。
/// 类似使用方式
/// 异步回到主线程执行 使用此方法可避免线程切换
/// @param block 待执行block
static inline void asyncOnMainQueue(dispatch_block_t block) {
if (!block) {
return;
}
if (NSThread.isMainThread) {
block();
} else {
dispatch_async(dispatch_get_main_queue(), block);
}
}