inline,宏定义,static,extern

梦想与她 提交于 2019-12-05 16:50:17
  1. inline一般用于定义代码简洁,耗时短,不像宏定义是在预编译阶段替换,inline是在汇编阶段替换,效果一样。

    一般编译器进行优化的时候会对简短方法进行这种优化,不进行声明也会进行inline,如果显示的声明为inline,会增大最后代码的大小。最终是否优化由编译器决定,这样声明了可以在头文件中定义,不用担心重复定义。

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

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

  3. extern是告诉编译器,如果当前项目没有定义相关的变量, 不需要报错,在链接阶段一定会有相关的定义的。

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

  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;
    	}
    

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!