Visual Studio似乎将头编译为.c文件

Visual Studio似乎将头编译为.c文件,c,visual-studio,visual-studio-2017,header-files,C,Visual Studio,Visual Studio 2017,Header Files,当我尝试构建一个包含.C和.h文件的C项目时,Visual Studio会给我一些奇怪的错误,比如我的头代码(应该很好): 我得到的错误如下: syntax error: missing '{' before '.' 或 都在28号线 它似乎试图像编译.c文件一样编译头文件,因为它需要一个函数体等等。你知道会发生什么吗?如果第28行确实是你评论的那一行,那么编译错误是非常令人惊讶的:这一行没有 可能的解释是,此行中至少有一个标识符在common.h或buffer.h中定义为宏,并扩展为

当我尝试构建一个包含.C和.h文件的C项目时,Visual Studio会给我一些奇怪的错误,比如我的头代码(应该很好):

我得到的错误如下:

syntax error: missing '{' before '.'    

都在28号线


它似乎试图像编译.c文件一样编译头文件,因为它需要一个函数体等等。你知道会发生什么吗?

如果第28行确实是你评论的那一行,那么编译错误是非常令人惊讶的:这一行没有

可能的解释是,此行中至少有一个标识符在
common.h
buffer.h
中定义为宏,并扩展为结构成员访问

例如:

#define socket_create    socket.create
检查这些头文件的内容

编辑:问题确实是系统头文件中的错误宏定义:

s_addr
在中定义为
\define s_addr s_un.s_addr


使用
s_addr
作为参数(或局部变量)的名称会导致编译器发出一条隐藏的错误消息,因为宏扩展…

如果第28行确实是您注释的那一行,则编译错误非常令人惊讶:这一行没有

可能的解释是,此行中至少有一个标识符在
common.h
buffer.h
中定义为宏,并扩展为结构成员访问

例如:

#define socket_create    socket.create
检查这些头文件的内容

编辑:问题确实是系统头文件中的错误宏定义:

s_addr
在中定义为
\define s_addr s_un.s_addr



使用
s\u addr
作为参数(或局部变量)的名称会导致编译器发出一条神秘的错误消息,因为宏扩展…

我知道这是一个老问题,但我今天也讨论了这个问题。对我来说,问题是文件的项类型被设置为源文件。我通过转到文件的属性并将项目类型设置为C/C++

解决了这个问题。我知道这是一个老问题,但我今天也讨论了这个问题。对我来说,问题是文件的项类型被设置为源文件。我通过转到文件属性并将项目类型设置为C/C++

请不要发布图片来解决此问题。剪切并粘贴错误消息
.c
文件和
.h
文件是相同的语言;函数可以在这两种语言中定义或声明(带或不带实体)。你有一个实际的语法错误。那么这些语法错误是什么呢?我发布了标题的代码。您可能在另一个包含(或包含)文件中有语法错误。请尝试制作一个“请不要发布图片”。剪切并粘贴错误消息
.c
文件和
.h
文件是相同的语言;函数可以在这两种语言中定义或声明(带或不带实体)。你有一个实际的语法错误。那么这些语法错误是什么呢?我为我的标题发布了代码。您可能在另一个包含(或包含)文件中有语法错误。请尝试创建一个新的文件。实际上,我刚刚修复了它,问题(像往常一样)与错误消息无关:s_addr似乎是一个关键字,我无法像那样调用我的变量。我应该回答并接受吗?
s\u addr
不是关键词。。。它是定义为头文件中的宏还是VisualStudio的宏?我用解释更新了答案
s_addr
确实不能用作参数名,而且错误消息很神秘。不是关键字,我指的是已经定义的单词,这就是为什么编译器不接受它作为变量名的原因。是的,我的思路是正确的。但是请注意,
s_addr
可以定义为一个全局变量或一个没有任何此类后果的函数。这个问题来自于预处理器宏的定义,这是一个非常糟糕的主意。实际上我刚刚修复了它,这个问题(像往常一样)与错误消息无关:它似乎是一个关键字,我不能像那样调用我的变量。我应该回答并接受吗?
s\u addr
不是关键词。。。它是定义为头文件中的宏还是VisualStudio的宏?我用解释更新了答案
s_addr
确实不能用作参数名,而且错误消息很神秘。不是关键字,我指的是已经定义的单词,这就是为什么编译器不接受它作为变量名的原因。是的,我的思路是正确的。但是请注意,
s_addr
可以定义为一个全局变量或一个没有任何此类后果的函数。问题来自预处理器宏的定义,这是一个非常糟糕的想法。
#define socket_create    socket.create