gcc的引數有很多,這裡說乙個很重要的引數-e。
如果我們只是想把原始檔預處理一下,-e就派上用場了。
它能幹什麼?
(1)把使用者定義的所有的預定義#define展開。
舉個例子,如果使用者有以下**:
#define max(a, b) ((a)>(b)?(a):(b))
int c = max(a, b);
經過gcc預處理後,預定義都將展開成如下樣子:
int c = ((a)>(b)?(a):(b));
(2)把所有的#include的檔案內容載入進來。
假如我們有#include ,預處理後程式會用stdio.h的內容替換掉#include ,
最後的程式中,你將找不到<>這樣的include,更多的是#include "/usr/include/stdio.h"之類的。
有了這個,你可以知道a)stdio.h在linux下的存放路徑,b)file結構體的摸樣,c)size_t型別的定義,d)其他很多你想知道的
(3)處理條件編譯,將不符合條件的**段刪除。
例如,有**段:
#ifdef m
printf("m");
#else
printf("nm");
#endif
預處理後程式將變成
printf("m");
(因為沒有#define m,其他行位置為空,**printf("nm")將被刪除)
怎麼使用?
使用很簡單:gcc -e a.c即可
如果想儲存結果,就重定向到某個檔案吧,如:gcc -e a.c>b.c(之後可對b.c編譯:gcc -o b b.c,執行效果同a.c)
在 Windows 上安裝 GCC
寫在原始檔中的源 是人類可讀的源。它需要 編譯 轉為機器語言,這樣 cpu 可以按給定指令執行程式。c 語言編譯器用於把源 編譯成最終的可執行程式。這裡假設您已經對程式語言編譯器有基本的了解了。一 安裝 mingw minimalist gnu for windows 是乙個適用於微軟windows...
在Linux上安裝redis 含gcc
安裝gcc c yum install gcc c wget 2.解壓 tar xzvf redis 3.0.4.tar.gz 3.編譯安裝 切換至程式目錄,並執行make命令編譯 cd redis 3.0.4 make 執行安裝命令 make prefix usr local redis inst...
在AIX 5L上尷尬的GCC
何謂尷尬呢?aix 5l 上本身有編譯器 visual age c c 但是不知怎麼的,老連裝上的 visual age 有問題,什麼問題呢?就是不能編譯程式,老是提示你編譯錯誤。為此我跟嚴明作了乙個試驗,編譯一段 用普通使用者 oracle 不能編譯過去,但是用 oracle 切換成root 使用...