日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gcc -E 产生预编译后的文件

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc -E 产生预编译后的文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用gcc -E選項,可以得到預編譯后的文件。這可以得到宏展開后的文件。

先來看看幾個相關聯的文件吧!

#ifndef __DEFS_H__ #define __DEFS_H__#ifdef WIN32#define snprintf _snprintf #endif// Join two variables #define MACRO_JOIN( X, Y ) MACRO_DO_JOIN( X, Y ) #define MACRO_DO_JOIN( X, Y ) MACRO_DO_JOIN2(X,Y) #define MACRO_DO_JOIN2( X, Y ) X##Y#endif //__DEFS_H__

// Signal.h(宏定義的模板類)/// \class SIGNAL_SIGNAL /// \brief 信號類模塊。 /// /// 一個信號被觸發時,會調用所有連接到其上的TFunctionN對象,只支持 /// 返回值為void的TFunctionN。SIGNAL_SIGNAL是一個宏,根據參數個數會被替換成 /// TSignalN,用戶通過 TSignalN<T1, T2, T3,..,TN>方式來使用,TN表示參數類型, /// N表示函數參數個數,目前最大參數為6。 /// \see FUNCTION_FUNCTION#define SIGNAL_SIGNAL MACRO_JOIN(TSignal,SIGNAL_NUMBER) #define FUNCTION_FUNCTION MACRO_JOIN(TFunction, SIGNAL_NUMBER)#include "Defs.h"#if (SIGNAL_NUMBER != 0) template <SIGNAL_CLASS_TYPES> #endif class SIGNAL_SIGNAL {/// 與信號模板參數類型匹配的函數指針對象類型typedef FUNCTION_FUNCTION<void SIGNAL_TYPES_COMMA> SigProc;public:/// 構造函數/// \param maxSlots 能夠連接的最大函數指針對象的個數SIGNAL_SIGNAL(int maxSlots) :m_numberMax(maxSlots), m_number(0){}/// 析構函數~SIGNAL_SIGNAL(){} };#undef SIGNAL_SIGNAL #undef FUNCTION_FUNCTION

// Signals.h(最終生成的6個模板類)#ifndef __INIFRA_SIGNALS_H__ #define __INIFRA_SIGNALS_H__//TSignal0 #define SIGNAL_NUMBER 0 #define SIGNAL_CLASS_TYPES void #define SIGNAL_TYPES_COMMA #define SIGNAL_TYPE_ARGS void #define SIGNAL_ARGS #include "Signal.h" #undef SIGNAL_NUMBER #undef SIGNAL_CLASS_TYPES #undef SIGNAL_TYPES_COMMA #undef SIGNAL_TYPE_ARGS #undef SIGNAL_ARGS//TSignal1 #define SIGNAL_NUMBER 1 #define SIGNAL_CLASS_TYPES typename T1 #define SIGNAL_TYPES_COMMA , T1 #define SIGNAL_TYPE_ARGS T1 a1 #define SIGNAL_ARGS a1 #include "Signal.h" #undef SIGNAL_NUMBER #undef SIGNAL_CLASS_TYPES #undef SIGNAL_TYPES_COMMA #undef SIGNAL_TYPE_ARGS #undef SIGNAL_ARGS//TSignal2 #define SIGNAL_NUMBER 2 #define SIGNAL_CLASS_TYPES typename T1, typename T2 #define SIGNAL_TYPES_COMMA , T1, T2 #define SIGNAL_TYPE_ARGS T1 a1, T2 a2 #define SIGNAL_ARGS a1, a2 #include "Signal.h" #undef SIGNAL_NUMBER #undef SIGNAL_CLASS_TYPES #undef SIGNAL_TYPES_COMMA #undef SIGNAL_TYPE_ARGS #undef SIGNAL_ARGS//TSignal3 #define SIGNAL_NUMBER 3 #define SIGNAL_CLASS_TYPES typename T1, typename T2, typename T3 #define SIGNAL_TYPES_COMMA , T1, T2, T3 #define SIGNAL_TYPE_ARGS T1 a1, T2 a2, T3 a3 #define SIGNAL_ARGS a1, a2, a3 #include "Signal.h" #undef SIGNAL_NUMBER #undef SIGNAL_CLASS_TYPES #undef SIGNAL_TYPES_COMMA #undef SIGNAL_TYPE_ARGS #undef SIGNAL_ARGS//TSignal4 #define SIGNAL_NUMBER 4 #define SIGNAL_CLASS_TYPES typename T1, typename T2, typename T3, typename T4 #define SIGNAL_TYPES_COMMA , T1, T2, T3, T4 #define SIGNAL_TYPE_ARGS T1 a1, T2 a2, T3 a3, T4 a4 #define SIGNAL_ARGS a1, a2, a3, a4 #include "Signal.h" #undef SIGNAL_NUMBER #undef SIGNAL_CLASS_TYPES #undef SIGNAL_TYPES_COMMA #undef SIGNAL_TYPE_ARGS #undef SIGNAL_ARGS//TSignal5 #define SIGNAL_NUMBER 5 #define SIGNAL_CLASS_TYPES typename T1, typename T2, typename T3, typename T4, typename T5 #define SIGNAL_TYPES_COMMA , T1, T2, T3, T4, T5 #define SIGNAL_TYPE_ARGS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5 #define SIGNAL_ARGS a1, a2, a3, a4, a5 #include "Signal.h" #undef SIGNAL_NUMBER #undef SIGNAL_CLASS_TYPES #undef SIGNAL_TYPES_COMMA #undef SIGNAL_TYPE_ARGS #undef SIGNAL_ARGS//TSignal6 #define SIGNAL_NUMBER 6 #define SIGNAL_CLASS_TYPES typename T1, typename T2, typename T3, typename T4, typename T5, typename T6 #define SIGNAL_TYPES_COMMA , T1, T2, T3, T4, T5, T6 #define SIGNAL_TYPE_ARGS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6 #define SIGNAL_ARGS a1, a2, a3, a4, a5, a6 #include "Signal.h" #undef SIGNAL_NUMBER #undef SIGNAL_CLASS_TYPES #undef SIGNAL_TYPES_COMMA #undef SIGNAL_TYPE_ARGS #undef SIGNAL_ARGS#endif //__SIGNALS_H__

通過gcc -E 選項,我們對Signals.h進行預編譯,即可得到宏展開后的文件,內容如下:

# 1 "Signals.h" # 1 "<command-line>" # 1 "Signals.h" # 10 "Signals.h" # 1 "Signal.h" 1 # 13 "Signal.h" # 1 "Defs.h" 1 # 14 "Signal.h" 2class TSignal0 {typedef TFunction0<void > SigProc;public:TSignal0(int maxSlots) :m_numberMax(maxSlots), m_number(0){}~TSignal0(){} }; # 11 "Signals.h" 2 # 23 "Signals.h" # 1 "Signal.h" 1 # 16 "Signal.h" template <typename T1>class TSignal1 {typedef TFunction1<void , T1> SigProc;public:TSignal1(int maxSlots) :m_numberMax(maxSlots), m_number(0){}~TSignal1(){} }; # 24 "Signals.h" 2 # 36 "Signals.h" # 1 "Signal.h" 1 # 16 "Signal.h" template <typename T1, typename T2>class TSignal2 {typedef TFunction2<void , T1, T2> SigProc;public:TSignal2(int maxSlots) :m_numberMax(maxSlots), m_number(0){}~TSignal2(){} }; # 37 "Signals.h" 2 # 49 "Signals.h" # 1 "Signal.h" 1 # 16 "Signal.h" template <typename T1, typename T2, typename T3>class TSignal3 {typedef TFunction3<void , T1, T2, T3> SigProc;public:TSignal3(int maxSlots) :m_numberMax(maxSlots), m_number(0){}~TSignal3(){} }; # 50 "Signals.h" 2 # 62 "Signals.h" # 1 "Signal.h" 1 # 16 "Signal.h" template <typename T1, typename T2, typename T3, typename T4>class TSignal4 {typedef TFunction4<void , T1, T2, T3, T4> SigProc;public:TSignal4(int maxSlots) :m_numberMax(maxSlots), m_number(0){}~TSignal4(){} }; # 63 "Signals.h" 2 # 75 "Signals.h" # 1 "Signal.h" 1 # 16 "Signal.h" template <typename T1, typename T2, typename T3, typename T4, typename T5>class TSignal5 {typedef TFunction5<void , T1, T2, T3, T4, T5> SigProc;public:TSignal5(int maxSlots) :m_numberMax(maxSlots), m_number(0){}~TSignal5(){} }; # 76 "Signals.h" 2 # 88 "Signals.h" # 1 "Signal.h" 1 # 16 "Signal.h" template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>class TSignal6 {typedef TFunction6<void , T1, T2, T3, T4, T5, T6> SigProc;public:TSignal6(int maxSlots) :m_numberMax(maxSlots), m_number(0){}~TSignal6(){} }; # 89 "Signals.h" 2

其中"# xx xxxxx"是一些說明文字,具體含義可查"gcc -E"的說明,本人也了解甚少,不作解釋!


通過這種宏結合模板的方式,將6個模板類通過1個模板類來生成,使代碼更加簡潔、清晰!


創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的gcc -E 产生预编译后的文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。