- inline一般用于定义代码简洁,耗时短,不像宏定义是在预编译阶段替换,inline是在汇编阶段替换,效果一样。
一般编译器进行优化的时候会对简短方法进行这种优化,不进行声明也会进行inline,如果显示的声明为inline,会增大最后代码的大小。最终是否优化由编译器决定,这样声明了可以在头文件中定义,不用担心重复定义。
- static是告诉链接器,当前文件定义的方法和变量只有当前模块可用,不能被其他的模块使用。
注意,对于
include
方式进行包含的没有影响。include
实际是对整个文件进行包含。这个一般是对于库与库,或者.o
与.o
之间,可见范围由编译器进行分隔。 - extern是告诉编译器,如果当前项目没有定义相关的变量, 不需要报错,在链接阶段一定会有相关的定义的。
和static 有些类似,也是使用于模块与模块之间的。
- 宏定义是在预编译阶段就进行替换。
可以通过
g++ -E source.cpp
的方式查看替换后的代码。/* [root@localhost definecompile]# g++ -E test.cpp # 1 "test.cpp" # 1 "<built-in>" # 1 "<命令行>" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 1 "<命令行>" 2 # 1 "test.cpp" */ int main() { int ss = 0; ss+=1; return 0; } //[root@localhost definecompile]# cat test.cpp #define SS(a) a+=1 int main() { int ss = 0; SS(ss); return 0; }
好处:当重复写一个变量或者是名字的时候,可以通过宏定义进行定义,手写容易出错,宏定义有编译器进行检测错误,定义方法的时候运行快,减少调用方法时的耗时。坏处:代码量增加,运行时占用的内存增大。 额外文档
来源:https://my.oschina.net/u/3695598/blog/3133801