Visual Studio似乎将头编译为.c文件
当我尝试构建一个包含.C和.h文件的C项目时,Visual Studio会给我一些奇怪的错误,比如我的头代码(应该很好): 我得到的错误如下: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中定义为宏,并扩展为
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