C 无法展开某些宏(GNU99编译器)
我试图理解使用gcc的-E标志的C预处理器C 无法展开某些宏(GNU99编译器),c,gcc,C,Gcc,我试图理解使用gcc的-E标志的C预处理器 gcc -E -Wall simpleSocket.c 我的源代码是(保持简单): SOCK_流不会被替换,尽管它是在socket.h库中定义的。我不知道为什么会这样?我正在使用GNU99编译器 感谢您的帮助。SOCK\u STREAM未展开,因为它不是宏 我抓取了一份你的代码副本,在我的系统上运行了gcc-E,得到了类似的结果。如果您在输出中搜索SOCK\u STREAM,您会发现类似的定义(我删除了一些可能是注释的空行): (枚举常量是int类型
gcc -E -Wall simpleSocket.c
我的源代码是(保持简单):
SOCK_流不会被替换,尽管它是在socket.h库中定义的。我不知道为什么会这样?我正在使用GNU99编译器
感谢您的帮助。
SOCK\u STREAM
未展开,因为它不是宏
我抓取了一份你的代码副本,在我的系统上运行了gcc-E
,得到了类似的结果。如果您在输出中搜索SOCK\u STREAM
,您会发现类似的定义(我删除了一些可能是注释的空行):
(枚举常量是
int
类型的常量表达式)可能是enum
而不是#define
@JS1:.Ah这就解释了它。当socket.h提到SOCK_STREAM作为#define时,我有点被难倒了。@shark1608:socket.h没有单一的源代码。您和我的系统上的版本使用枚举
;链接到的版本使用#define
。两者都可能有效。POSIX要求SOCK_STREAM
为“符号常量”。
#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;
}
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
};