gpt4 book ai didi

c - C 宏的特殊用途

转载 作者:太空狗 更新时间:2023-10-29 17:20:46 24 4
gpt4 key购买 nike

阅读C库的套接字接口(interface)的代码,我发现:

/* Types of sockets.  */
enum __socket_type
{
SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
byte streams. */
#define SOCK_STREAM SOCK_STREAM
SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
of fixed maximum length. */
#define SOCK_DGRAM SOCK_DGRAM
...

这个“习惯用法”在整个 bits/socket.h 中使用。我只是好奇,这些宏的目的是什么?

最佳答案

这些常量过去只是#define,所以您现在看到的可能是为了防止您不小心混合新旧头文件。使用 enum 定义常量的一个优点是 enum 成员往往在调试器中可用,而 #define 宏则不可用。

如果您(不小心)包含了其他一些同样尝试 #define SOCK_STREAM 的头文件,您将收到编译器警告,而不是默默地使用可能不正确的值。

更新

通过 glibc git repo 查看,我找到了添加 #define 的特定提交,并带有以下注释:

* sysdeps/generic/socketbits.h: Also make SOCK_* constants available
as macros so that #ifdef works.
* sysdeps/unix/sysv/linux/socketbits.h: Likewise.

给你。

关于c - C 宏的特殊用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11389230/

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