gpt4 book ai didi

c - 为了保持一致性,我应该包含未使用的参数吗?

转载 作者:行者123 更新时间:2023-12-02 09:36:46 25 4
gpt4 key购买 nike

这个问题可以抽象为其他编程语言,它更多的是一个礼仪/风格问题。因此,我期待答案中的一些意见。但在回复中,我希望看到为什么一种方法比另一种方法更干净的理由。

我有一个有点大的模块。它是专有串行通信协议(protocol)的解析器。在这个模块中我有 40-50 个类似的函数。他们都持有类似的论点。当我收到一个有效的数据包并删除其所有帧时,我将根据数据包的功能代码调用这些函数之一。

因此,为了论证,这里有一个声明:

/*!
* \brief Processes an incoming foo packet and updates the bar data structure
* \param data_len Length of the packet's data payload
* \param[in] p_data Pointer to the packet's data payload
*/
static bool_t process_foo_response(uint8_t data_len, uint8_t * p_data);

现在,对于某些数据包,我从不期望收到任何数据负载。数据长度始终为 0,并且不会检查有效负载。我对 data_len 或 p_data 参数没有任何目的或用途。我将这些参数包含在每个函数的参数列表中只是为了保持一致性,以便所有函数都具有相同的公共(public)接口(interface)。但这是否具有误导性——最好不要使用这些未使用的参数?我很难决定这是否是最干净、最直接的做事方式,或者我是否会让几年后的下一个程序员感到困惑。

当我有一个常用参数时,我通常会在参数列表文档中调用它,如下所示

/*!
* \param data_len This packet has no payload, a payload length of 0 is verified.
* \param[in] p_data This packet has no payload, so no payload will be processed by
this function.
*/

我最初想要保留上游逻辑的所有参数的一个原因是 - 我正在考虑创建一个函数指针列表,其中包含基于函数代码的各种偏移量。这样,它就不需要是带有指向参数列表的指针的二维数组。但我的上游逻辑现在只是一个大的低效开关/案例(也许有一天我能够证明花时间让它更漂亮、更高效),但是嘿,这种方法非常简单,而且很快就能实现!

最佳答案

在严格的 C 中,虽然您可以在函数声明中省略参数名称,但您必须在函数定义中具有参数名称。与 C++ 不同,在定义中参数名称​​可以被省略。

处理未使用的函数参数的常见做法(因为许多编译器会警告未使用的参数)是将参数强制转换为 void,通常通过宏:

#define UNUSED_PARAMETER(p) ((void)(p))

这会消除“未使用的参数”警告,但不会生成任何其他代码。


至于是否省略声明中的名称,我认为这是一种权衡。将名称保留在声明中可以使其与定义保持一致,但从声明中删除它们有助于强制执行它们未使用的事实。

关于c - 为了保持一致性,我应该包含未使用的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25248255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com