c - 在 C 中的数据类型之前使用宏

标签 c function macros

我想知道在任何数据类型之前宏的用途是什么。我在生产代码中发现了很多实例。但是我不明白它的用途。例如:

#define OUT
#define IN

/* Function declaration is something like */

int my_func(IN const char *p, IN int d, OUT const char *x) {

    /* some normal operation */
    return 0;
}

谁能解释一下这背后的目的是什么?

最佳答案

这是一种向调用者记录哪些参数是输入参数,哪些是输出参数的方法。尽管在您的示例中 x 不能作为输出参数,因为它是 const,所以看起来 OUT 被误用了。

一个更有意义的例子是:

struct server_t;

struct error_t {
    int32_t error_code;
    const char *message;
};

// Returns a new server instance on success. On error, fills the
// error with the error code and message (and returns NULL).
server_t *create_server(IN uint16_t port, OUT error_t *error);

在这个例子中,error 并不是真正的输入参数。它不会改变函数的行为。它只是函数向用户返回一些附加信息的一种机制。因此,它被标记为 OUT

另一方面,

port 确实会改变服务器的构建和配置方式,因此它被标记为 IN 参数。

如果它同时用作输入和输出参数,您甚至可以将参数标记为 IN OUT

关于c - 在 C 中的数据类型之前使用宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42991025/

相关文章:

c - 警告 : parameter names (without types) in function declaration [enabled by default]

c++ - C++ 结构的函数

javascript - jQuery:在执行 toggleClass 之后执行一个函数

vim - 如何在 vim 文本文档中进行多重计算?

macros - 带有字符串文字前缀的预处理器字符串化运算符

c - 类函数宏的扩展创建一个单独的标记

c++ - 逆向工程 OSX 用户诊断报告堆栈跟踪

c - 变量类型的初始化和更新

c - 3 路快速排序(C 实现)

c++ - 添加预处理器 #define 以更改包含哪些 header 以及调用哪些函数