在'{'令牌之前)编译错误(错误:预期';',','或')'

时间:2012-10-27 03:55:17

标签: c debugging gcc

我写了一个network.h和network.c文件。当我用gcc编译它。它表现出一种奇怪 错误。

gcc -o network.o -c network.h

network.c:14: error: expected ‘;’, ‘,’ or ‘)’ before ‘{’ token

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

这是头文件。

network.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

这是工具的一部分。

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

头文件中的这一行

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

缺少一个近括号。添加它将修复此错误。编译器因报告错误行上未关闭括号的错误而臭名昭着。

答案 1 :(得分:2)

如果你花点时间阅读它所说的错误,

network.c:14: error: expected ‘;’, ‘,’ or ‘)’ before ‘{’ token

现在,如果你知道#include只是包含文件并将文件的内容放入当前文件中,那么你可以只计算行数(在这种情况下文件很小),你'将到达network.h中的第6行,其中包含此问题,即此行

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

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