2017-04-11 56 views
0

我只是想嘗試一些「click」cpp模塊。 我來到這個防空火炮語法CLICK模塊的cpp語法

class SimpleQueue : public Element, public Storage { public: 
SimpleQueue() CLICK_COLD; 
int configure(Vector<String>&, ErrorHandler*) CLICK_COLD; 

我想知道這是什麼語法「CLICK_COLD」?

https://github.com/kohler/click/blob/master/elements/standard/simplequeue.hh

這只是一個文件。但是有多個文件有這個「CLICK_COLD」在哪裏使用。不確定cpp中的這個語法是什麼?

一般來說,我想了解什麼是XYZ_YYY後cpp中的任何方法或構造函數的意思?

+0

這個問題爲什麼用這麼多不同的語言標記?請修改您的問題,並刪除不必要的標籤。 – CodingNinja

回答

2

它被稱爲Preprocessor Directives。 你可以找到它是如何在的config.h定義:

/* Define macro for cold (rarely used) functions. */ 
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) 
# define CLICK_COLD /* nothing */ 
#else 
# define CLICK_COLD __attribute__((cold)) 
#endif 

它是什麼,如果編譯器的版本是高到足以支持Attribute Syntax,然後用__attribute__((cold)),否則什麼也不做。

__GNUC____GNUC_MINOR__告訴the version of the compiler您正在使用。

coldcommon function attributes之一,描述如下:

上函數的冷屬性用於通知編譯器該功能是不可能被執行。該函數針對大小而不是速度進行了優化,並將其放置在文本部分的特殊子部分中,以便所有冷函數緊密結合在一起,從而改善程序中非冷部分的代碼局部性。分支預測機制將導致調用代碼內的冷函數的路徑標記爲不可能。因此,將用於處理不太可能的條件(例如,錯誤)的函數標記爲冷以便改善在罕見情況下確實稱爲標記功能的熱函數的優化,因此是有用的。

總而言之,CLICK_COLD的每個函數都很少使用,幫助編譯器優化。

+0

謝謝@Dean。這很有幫助 – YOGI

+0

你能告訴我你從哪裏得到這個? 「 」函數的cold屬性用於通知編譯器該函數不太可能被執行。該函數針對大小進行了優化...「 – YOGI

+0

@YOGI我剛更新了我的答案,並且鏈接到了屬性描述頁面。 –