當前位置:首頁 » 編程軟體 » 預編譯宏

預編譯宏

發布時間: 2022-02-02 17:13:30

① 新手求解一道關於【宏定義/預編譯】的很簡單的問題!!!

宏定義是直接代換的
T(a++,a*++b,a+b+c)
被代換成
a++*a+b+c*a*++b/4

(a++)*a+b+c*a*(++b)/4
其中b要先自增一
所以,表達式的值為
3*3+4+5*3*4/4=28

a++自增的值是要在本行語句全部執行完後才增加1的

② iOS開發 預編譯的宏可以改嗎

iOS開發 預編譯的宏是可以改的。改了不會有什麼問題的

c語言

難道3不能是字元串嗎?

"3*pi"是字元串,"3"是它的子串。
"3*pi"宏展開後為"3*3.1415926"也是字元串,整個源程序都被認為字元串!

現在,還有有編譯,編譯時,編譯器會把3*3.1415926當表達式計算,用結果再替換一次!

④ 怎麼在NDK的makefile加入預編譯宏

一個程序使用宏:在代碼中定義,在編譯器編譯的時候指定。所謂的makefile只是一個編譯系統,最終還是調用編譯器。
對於你的問題,在NDK的makefile中加入宏定義,換種說法是:如何給NDK的makefile添加編譯選項,有一個LOCAL_CFLAGS就可以定義選項了(或許還有其他的xxxcflags的東西定義,具體就自己查手冊)。
加入選項,如:-DMyMacro

ifeq ($(HOST_OS),linux)
LOCAL_CFLAGS := -DGCC
endif
lz要的是在這個嗎

⑤ c++當中的預編譯宏的問題

#ifndef HY //一般在頭文件都都使用這種格式以防止頭文件在同一文件中被包含兩次。語名#ifndef hyong…..#endi表示僅當以前沒有使用預處理器編譯指令#define定義的名稱hyong時才處理#ifndef….#endif之間的語句。

#define HY //在這里用define定義一個名字HY,以便在下次訪問到該頭文件時,使該名字已經被定義,從而讓程序跳過#ifndef….#endif間的語句。

...

#endif

明白了??
如果還不明白,就下載本人的文章《C++名稱空間與作用域專題》和《C++宏,預處理器,RTTI,typeid與強制類型轉換》去了解了解吧。

⑥ C語言宏預編譯中如何將字元串展開

ide 是 vsts 2005 / 2008 的話可以查看預編譯文件
項目屬性頁 - 配置屬性 - c / c++ - 預處理器 - 生成與處理文件 - 是
然後會生成一個後綴名是 .i 的文件,對著 .c .cpp 就可以查看如何展開了。

一般情況下在程序預處理時,一般出現宏名字的地方都用宏定義的字元串替換,然後根據有參數沒有參數進行不同的調用。

⑦ c語言gdb調試時怎麼看預編譯宏是否定義

gdb 看不了任何與宏有關的內容。宏在編譯之前,就被預編譯器替換掉了,對於編譯器來說,根本看不到所謂的宏,所以編譯出來的二進制代碼中,也根本不會包含任何宏本身的信息,gdb也自然無法獲取信息了。

⑧ ios cocoapods怎麼添加預編譯宏

ALT+F11打開VBE編輯器,將代碼放進去,運行(單擊工具----宏---宏找到這代碼的名字運行就可以了)

⑨ 宏替換,宏展開到底分別在什麼時候進行

//在宏 使用的時候 分為

宏定義 和 宏展開, 你那個 宏替換就是展開

宏定義是你自己寫的 #define
然後展開在預編譯時候處理
這個時候編譯器先掃描一遍文件 把用到宏的地方都做字元替換

比如
#define M 1

int a = M;
那麼預編譯的時候就把 M 替換成1

注意宏只做文本替換,所以
比如 #define MUL(__x__, __y__) __x__ * __y__

int a = MUL(a + b, c+ d);
會被替換成 int a = a + b * c + d // 可能就會和初衷違背(如果你想做的是 (a + b) * (c + b))

從展開的角度來說 因為宏是可以嵌套的 所以宏在替換的時候 我們叫做展開

比如 做一個函數參數聲明
#define PARAMS_SET_1(__type__, __name__) __type__ __name__
#define PARAMS_SET_2(__type__, __name__) __type__ __name__##1, __type__ __name__##2

//... 定義N個 PARAMS_SET_N
#define PARAMS(__size__, __type__, __name__) PARAMS_SET_##__size__(__type__, __name__)

然後 定義函數

int foo(PARAMS(2, int, n));
那麼預編譯的時候宏會這樣展開

1, int foo(PARAMS_SET_2(int, n));
2, int foo(int n1, int n2);

另外注意就是編程的時候 由於宏只是文本替換,缺少類型檢測 以及運算順序這樣的功能,所以要少用宏

上面所有的宏都有替換的方案
#define M 1 替換方案
struct M
{enum {value = 1} };
int a = M::value;

#define MUL(__x__, __y__) __x__ * __y__ 替換方案
template<int x, int y>
struct MUL
{enum{value = x * y}};

int a = MUL<10 + 20, 10 + 30>::value;

最後一個PARAMS的替換方案就是函數重載
template<typename T>
int foo(T n1);

template<typename T>
int foo(T n1, Tn2);

//後面定義N個

⑩ XCode如何設置預編譯宏

編譯運行都沒問題,但是靜態解析會指出有問題。
正確使用設置預編譯宏的方法是:

2.找到GCC 4.2 Preprocess, 編輯preprocess marco, 預編譯宏

熱點內容
ftp服務軟體下載 發布:2025-01-07 06:53:42 瀏覽:310
領導專車配置物品怎麼處理 發布:2025-01-07 06:49:50 瀏覽:444
ftp字元集 發布:2025-01-07 06:28:21 瀏覽:344
資料庫返回值 發布:2025-01-07 06:17:26 瀏覽:376
彈簧自動壓縮 發布:2025-01-07 06:08:35 瀏覽:523
傳奇榮耀腳本 發布:2025-01-07 05:53:14 瀏覽:980
為什麼安卓手機連接不了蘋果耳機 發布:2025-01-07 05:37:49 瀏覽:76
c語言mfc 發布:2025-01-07 05:33:18 瀏覽:593
自己搭建郵件伺服器ddns 發布:2025-01-07 05:19:29 瀏覽:206
光碟機無法訪問指定設備 發布:2025-01-07 05:17:19 瀏覽:105