C 编译错误(错误:应为‘;’;‘;’;或‘;)’;在‘之前;{&x2019;令牌)

C 编译错误(错误:应为‘;’;‘;’;或‘;)’;在‘之前;{&x2019;令牌),c,debugging,gcc,C,Debugging,Gcc,我写了一个network.h和network.c文件。当我用gcc编译它时,它显示了一个奇怪的 错误 代码尝试通过套接字发送消息 这是头文件 网络.h #ifndef _NETWORK_H_ #define _NETWORK_H_ int open_tcp(char* host, int port); int nsend(int sock_fd, char* buffer, int num); int nrecv(int sock_fd, char* buffer, int num; int

我写了一个network.h和network.c文件。当我用gcc编译它时,它显示了一个奇怪的 错误

代码尝试通过套接字发送消息

这是头文件

网络.h

#ifndef _NETWORK_H_
#define _NETWORK_H_

int open_tcp(char* host, int port);
int nsend(int sock_fd, char* buffer, int num);
int nrecv(int sock_fd, char* buffer, int num;
int recv_line();
int close(int socket_fd);

#endif
这是工具的一部分

网络.c

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 
#include <stdlib.h>
#include "network.h"

#define BUFFER_SIZE 300000

int open_tcp(char* host, int port)
{
    int sockfd, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    sockfd = -1;
    char buffer[BUFFER_SIZE];
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    server = gethostbyname(host);
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, 
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);
    serv_addr.sin_port = htons(port);
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");
    return sockfd;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括“network.h”
#定义缓冲区大小
int open_tcp(字符*主机,int端口)
{
int-sockfd,n;
服务地址中的结构sockaddr\u;
结构主机*服务器;
sockfd=-1;
字符缓冲区[缓冲区大小];
sockfd=套接字(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
错误(“打开套接字时出错”);
服务器=gethostbyname(主机);
如果(服务器==NULL){
fprintf(stderr,“错误,没有这样的主机\n”);
出口(0);
}
bzero((char*)&serv_addr,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
b复制((字符*)服务器->h_地址,
(char*)和serv_addr.sin_addr.s_addr,
服务器->h_长度);
serv_addr.sin_port=htons(端口);
if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
错误(“连接错误”);
返回sockfd;
}

谢谢您的帮助。

头文件中的这一行

int nrecv(int sock_fd, char* buffer, int num;

缺少一个右括号。添加它将修复此错误。编译器因在错误的行中报告与未闭合括号相关的错误而臭名昭著。

如果您给一分钟时间阅读它所说的错误

network.c:14: error: expected ‘;’, ‘,’ or ‘)’ before ‘{’ token
现在,如果您知道
#include
只包含文件,并将文件内容放入当前文件中,那么您可以只计算行数(在本例中,由于文件很小),您将到达
network.h
中的第6行,该行存在问题,即这一行

int nrecv(int sock_fd, char* buffer, int num;

希望这有助于您更好地理解并帮助您通过找到准确的错误位置来解决此类错误。

这不是很“疯狂”。使用带有“彩色”代码的编辑器。记事本++(windows、linux桌面)或mcedit-(linux控制台)。我没有想到应该搜索头文件。感谢您的帮助。在您的帮助下,我了解了有关编译器错误的更多信息。
int nrecv(int sock_fd, char* buffer, int num;