gpt4 book ai didi

c - 无法扩展某些宏(GNU99 编译器)

转载 作者:行者123 更新时间:2023-11-30 18:39:23 24 4
gpt4 key购买 nike

我正在尝试使用 gcc 的 -E 标志来理解 C 预处理器。

gcc -E -Wall simpleSocket.c

我的源代码是(保持简单):

#include<stdio.h>
#include<sys/socket.h>

int main(){
int socketID = 0;
int Socket_Protocol = 6;

socketID = socket(AF_INET,SOCK_STREAM,Socket_Protocol);
printf("Socket created is %d",socketID);
return 0;
}

替换的代码显示:

int main(){                                                                                                                                                                                                                                             
int socketID = 0;
int Socket_Protocol = 6;

socketID = socket(2,SOCK_STREAM,Socket_Protocol);
printf("Socket created is %d",socketID);
return 0;
}

SOCK_STREAM 不会被替换,尽管它是在 socket.h 库中定义的。我无法弄清楚为什么会发生这种情况?我正在使用 GNU99 编译器。

感谢您的帮助。

最佳答案

SOCK_STREAM 未展开,因为它不是宏。

我获取了您的代码副本,并在我的系统上通过 gcc -E 运行它,并得到了类似的结果。如果您在输出中搜索 SOCK_STREAM,您将找到与此类似的定义(我删除了一些可能是注释的空行):

enum __socket_type
{
SOCK_STREAM = 1,
SOCK_DGRAM = 2,
SOCK_RAW = 3,
SOCK_RDM = 4,
SOCK_SEQPACKET = 5,
SOCK_DCCP = 6,
SOCK_PACKET = 10,
SOCK_CLOEXEC = 02000000,
SOCK_NONBLOCK = 00004000
};

(枚举常量是 int 类型的常量表达式。)

关于c - 无法扩展某些宏(GNU99 编译器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29933826/

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