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

    好處:當重複寫一個變量或者是名字的時候,能夠經過宏定義進行定義,手寫容易出錯,宏定義有編譯器進行檢測錯誤,定義方法的時候運行快,減小調用方法時的耗時。壞處:代碼量增長,運行時佔用的內存增大。 額外文檔命令行

相關文章
相關標籤/搜索