如何理解代码中的以下宏
How to understand the below macros in the code
我正在尝试了解应用程序的代码库,但在解释以下宏时遇到问题。任何人都可以帮助我理解下面的代码。
#define LIST_OF_AP_COMMANDS(ENTRY)
ENTRY(WLAN_AP_SET_IP, 2, (WEP_MODE | WPA_MODE | NONE_MODE), "ifconfig wlan1 %s > /dev/null", abAPIpAddress)
ENTRY(WLAN_AP_REMOVE_NETWORK, 2, (WEP_MODE | WPA_MODE | NONE_MODE), "wpa_cli -iwlan1 remove_network 0 > /dev/null")
ENTRY(WLAN_AP_ADD_NETWORK, 2, (WEP_MODE | WPA_MODE | NONE_MODE), "wpa_cli -iwlan1 add_network > /dev/null")
ENTRY(WLAN_AP_SET_SSID, 2, (WEP_MODE | WPA_MODE | NONE_MODE), "wpa_cli -iwlan1 set_network 0 ssid '"%s"' > /dev/null", CON_acbSSID)
ENTRY(WLAN_AP_SET_PASS, 2, (WPA_MODE), "wpa_cli -iwlan1 set_network 0 psk '"%s"' > /dev/null", CON_acPassword)
ENTRY(WLAN_AP_SET_PASSWORD, 2, (WEP_MODE | WPA_MODE | NONE_MODE), "wpa_cli -iwlan1 set_network 0 key_mgmt %s > /dev/null", pcSecurityTypes[CON_bSecurityType] )
ENTRY(WLAN_AP_SET_FREQUENCY, 2, (WEP_MODE | WPA_MODE | NONE_MODE), "wpa_cli -iwlan1 set_network 0 frequency %d > /dev/null", CON_awWifiFreqs[ CON_bChannel ])
ENTRY(WLAN_AP_SET_MODE, 2, (WEP_MODE | WPA_MODE | NONE_MODE), "wpa_cli -iwlan1 set_network 0 mode 2 > /dev/null")
ENTRY(WLAN_AP_SET_MODE, 2, WEP_MODE , "wpa_cli -iwlan1 set_network 0 wep_key0 %s > /dev/null", CON_acPassword)
ENTRY(WLAN_AP_SET_MODE, 2, WEP_MODE , "wpa_cli -iwlan1 set_network 0 wep_tx_keyidx 0 > /dev/null")
ENTRY(WLAN_AP_ENABLE_NETWORK, 10, (WEP_MODE | WPA_MODE | NONE_MODE), "wpa_cli -iwlan1 enable_network 0 > /dev/null" )
//! Expander with the execution of each command
#define EXECUTE_WLAN_COMMANDS(index, delay, mode, command, ...)
if( ( abSecurityModes[CON_bSecurityType] & mode ) ) { CON_cExecuteWlanCommand(command, ##__VA_ARGS__); } else { printf("wpa_cli %d %drn", abSecurityModes[CON_bSecurityType], mode); }
sleep( delay );
X-macros是一种传统的技术,用于处理使用宏预处理器(如C/C++预处理器)的语言中的代码生成。这个想法是,你有一个元素列表 - 类型,枚举常量,消息字符串等 - 并且你需要多次使用该列表以生成你的code.fir示例,你可能想要创建一个错误消息列表和一个为每个错误定义符号名称的enum
。或者,也许您有几个不同的结构,您需要为每个结构创建两个或多个特定函数。(在C++中,您可能会对这种特殊情况使用模板。
名称"X-macro"来自原始模式,其中列表宏在列表的每个元素上调用具有给定名称的宏 - 按照约定X
,导致如下模式:
#define X(name, value) … // some use of name and value
HANDLE_LIST
#undef X
#define X(name, value) … // sone other use
HANDLE_LIST
#undef X
// etc.
但在某些时候,使用列表处理程序变得更加普遍,该处理程序将要调用的宏的名称作为参数(所谓的"高阶宏")。这允许更有意义的名称,并避免需要重复取消定义X
。(如果您有不止一个列表,则特别有用。
这就是你在这里看到的。
相关文章:
- 有人能帮我理解这个c++代码吗
- 理解这行C++指针代码
- 我正在尝试理解代码块中的这些错误
- 不理解为什么代码没有产生所需的答案
- 无法理解代码背后的逻辑,这是在两个给定数字之间生成素数的优化问题
- 给定使用 Bitmask 的解决方案,我无法理解代码中标记的条件评估
- 如何高效浏览OpenCV仓库理解代码?
- 无法理解代码的特定片段:这是一个函数,只是一行还是什么
- 如何理解代码中的以下宏
- 自定义"nullptr",但如何理解代码?
- C++按位运算符理解代码
- 对理解C++代码的流执行稍有帮助
- 需要帮助理解C++代码
- 无法理解代码段的返回类型
- 虚拟公共继承?需要帮助理解代码
- 理解c++代码
- Bitshift -需要解释才能理解代码
- 用uml工具理解c++代码库
- 理解代码
- 归并排序递归不清楚数组的排序是如何实现的,请帮助理解代码