inline,宏定义,static,extern

  1. inline通常用于定义代码简洁,耗时短,不像宏定义是在预编译阶段替换,inline是在汇编阶段替换,效果同样。

    通常编译器进行优化的时候会对简短方法进行这种优化,不进行声明也会进行inline,若是显示的声明为inline,会增大最后代码的大小。最终是否优化由编译器决定,这样声明了能够在头文件中定义,不用担忧重复定义。html

  2. static是告诉连接器,当前文件定义的方法和变量只有当前模块可用,不能被其余的模块使用。

    注意,对于include方式进行包含的没有影响。include实际是对整个文件进行包含。这个通常是对于库与库,或者.o.o之间,可见范围由编译器进行分隔。优化

  3. extern是告诉编译器,若是当前项目没有定义相关的变量, 不须要报错,在连接阶段必定会有相关的定义的。

    和static 有些相似,也是使用于模块与模块之间的。ui

  4. 宏定义是在预编译阶段就进行替换。 能够经过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;
    	}

    好处:当重复写一个变量或者是名字的时候,能够经过宏定义进行定义,手写容易出错,宏定义有编译器进行检测错误,定义方法的时候运行快,减小调用方法时的耗时。坏处:代码量增长,运行时占用的内存增大。 额外文档命令行

相关文章
相关标签/搜索