C 无法展开某些宏(GNU99编译器)

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标志的C预处理器

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
};