通常,我們在編寫c/c++代碼時,使用宏定以 #ifndef _xxx_H_ #define _xxx_H_ 的方式來避免頭文件的重復包含。但是,有些情況下還會出現函數重定義的錯誤,總結原因可以歸結為:在頭文件中定義了非內聯函數 ...
define min a,b a lt b a : b define max a,b a gt b a : b 我常常會用這兩個宏,一般來說,宏比函數更高效,但是如果里面元素是函數的話,就不是這樣。因為宏只是在編譯預處理階段執行簡單替換,如果你有兩個函數f和g,代碼中寫了min f a ,g a ,那么就會被展開為 f a lt g a f a : g a ,這是 次調用,而不是想象中的先算f ...
2013-01-07 14:54 0 3859 推薦指數:
通常,我們在編寫c/c++代碼時,使用宏定以 #ifndef _xxx_H_ #define _xxx_H_ 的方式來避免頭文件的重復包含。但是,有些情況下還會出現函數重定義的錯誤,總結原因可以歸結為:在頭文件中定義了非內聯函數 ...
要點:變量都用括號括起來,防止出錯,結尾不需要;。在實際編程中,不推薦把復雜的函數使用宏,不容易調試。多行用\ 要寫好C語言,漂亮的宏定義是非常重要的。宏定義可以幫助我們防止出錯,提高代碼的可移植性和可讀性等。 在軟件開發過程中,經常有一些常用或者通用的功能或者代碼段,這些功能既可以寫成函數 ...
內聯函數的執行過程與帶參數宏定義很相似,但參數的處理不同。帶參數的宏定義並不對參數進行運算,而是直接替換;內聯函數首先是函數,這就意味着函數的很多性質都適用於內聯函數,即內聯函數先把參數表達式進行運算求值,然后把表達式的值傳遞給形式參數。 內聯函數與帶參數宏定義的另一個區別是,內聯函數 ...
談起C++中的宏,我們第一個想到的應該就是“#define”,它的基本語法長得像這樣: 宏的聲明和普通的函數聲明很像,但是兩者之間有本質的區別:C++函數在運行時(runtime)才執行代碼段;而宏則是在預編譯時期(preprocessor)執行代碼段。下面簡單介紹一下幾個 ...
#ifndef _CFG_LOG_H_#define _CFG_LOG_H_ #pragma GCC diagnostic ignored "-Wwrite-strings" #define CO ...
C/C++中宏總結C程序的源代碼中可包括各種編譯指令,這些指令稱為預處理命令。雖然它們實際上不是C語言的一部分,但卻擴展了C程序設計的環境。 ANSI標准定義的C語言預處理程序包括下列命令: #define,#error,#include,#if,#else,#elif ...
在C++的宏定義中,符號##一般是用於連接,包括參數的連接,參數與標識符的連接等,然后形成一個新的標識符。 下面舉幾個例子來進行說明。 eg1: 或者不用#define ab "123456",直接在main函數中定義一個string ab ...
C++ 宏定義將一個標識符定義為一個字符串,源程序中的該標識符均以指定的字符串來代替。預處理命令不同於一般C++語句。因此預處理命令后通常不加分號。這並不是說所有的預處理命令后都不能有分號出現。由於宏定義只是用宏名對一個字符串進行簡單的替換,因此如果在宏定義命令后加了分號,將會連同分號一起進行置換 ...