2017-04-11 48 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我刚更新了我的答案,并且链接到了属性描述页面。 –