do{}while(0)
宏的用处?
避免调用者出现使用错误,保证程序执行的一致性。
例如:
#define FOO() foo1();foo2();
调用代码:
if (a > 0)
FOO();
会被扩展成:
if (a > 0)
foo1();foo2();
这时就产生了一个问题,若是a <= 0
,foo2()
仍然会被调用。
正确的写法:
#define FOO() \
do{ \
foo1(); \
foo2(); \
}while(0)
栈和堆的区别
操作栈空间是比堆速度快的,因为使用堆你需要先寻找到一块足够大的空间(malloc
),而且使用的内存并不是连续的(如动态链表),需要在内存中跳来跳去,这些操作都会降低性能。
还有很多原因,如cpu对栈有直接支持(push
, pop
);栈内存由操作系统管理,而堆内存由用户程序管理。
指针
In computer science, a pointer is a programming language object that stores a memory address. --wikipedia
在计算机科学中,指针就是存储了一个内存地址的编程语言对象。
引用
以 java 为例:
A reference is an address that indicates where an object's variables and methods are stored.
引用是一个指向了对象的方法和变量存储位置的地址。
删除当前目录除某文件外的所有文件
ls | grep -v except_filename | xargs rm -rf
更新所有的module
git submodule update --init --recursive --remote
Thu Feb 17 10:27:30 2022