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