gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:54:50 24 4
gpt4 key购买 nike

当我尝试构建包含 .c 和 .h 文件的 C 项目时,Visual Studio 给出了奇怪的错误,就像这是我的 header 的代码(应该完全没问题):

#ifndef _CLIENT_SOCKET_H_
#define _CLIENT_SOCKET_H_

#include "common.h"
#include "buffer.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef void* wsocket;

int socket_create(wsocket* sock, int port, const char* addr, struct sockaddr_in *s_addr); //This is line 28

int socket_connect(wsocket sock, struct sockaddr_in s_addr);

bool socket_recv_buffer(wsocket, buffer_t*);

bool socket_send_buffer(wsocket, buffer_t);

int socket_destroy(wsocket* sock);

#ifdef __cplusplus
}
#endif

#endif /* _CLIENT_SOCKET_H_ */

我收到如下错误:

syntax error: missing '{' before '.'    

syntax error: '.'   

均位于第 28 行。

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

最佳答案

如果第 28 行确实是您评论的那行,那么编译错误是相当令人惊讶的:这一行上没有 .

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

例如:

#define socket_create    socket.create

检查这些头文件的内容。

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

https://msdn.microsoft.com/en-us/library/windows/hardware/ff556972(v=vs.85).aspx

s_addr 定义为 #define s_addr S_un.S_addr

使用 s_addr 作为参数(或局部变量)的名称会导致编译器出现神秘的错误消息,因为宏扩展......

关于c - Visual Studio 似乎将 header 编译为 .c 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46456019/

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