我有这个头文件...出于某种原因我不断收到错误说
log_server.h:48: error: expected identifier or ‘(’ before numeric constant
我在定义put_evt和print_evt_list函数的两行上都出现了这个错误,
这是代码的样子:
#ifndef _GENERIC
#define _GENERIC
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#endif
#ifndef _NETWORKING
#define _NETWORKING
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
typedef struct sockaddr SA;/* To make casting in the (bind, recvfrom, sendto) more readable */
#endif
#define LOGIN_EVT 0
#define LOGOUT_EVT 1
#define RECV_MSG 27
#define SEND_MSG 64000
#define MAX_EVT_COUNT 3000
struct evt{
char user_name[8];
int type;
long int time;
};
/* open log file to append the events to its end
* return 0 on success and -1 on failure (file could not be opened)
*/
int init_log(const char *log_fname);
/* closes the log file
* return 0 on success and -1 on failure (file could not be opened)
*/
int terminate_log();
/* add new event to the log file
* return 0 on success and -1 on failure
*/
int put_evt(struct evt *e);
/* get list of events that occured after the given time
* count is the size of the allocated and passed e-list
* return number of found events on success and -1 on failure
*/
int get_events(struct evt *e_list, long int time);
/* print given event's info (name, time)*/
void print_evt(struct evt *e);
/* print "count" event's info from the given e_list info (name, time)*/
void print_evt_list(struct evt *e_list, int count);
/* startListen takes a port number and returns a listening descriptor on sucess or negavtive on error */
int startListen(int port);
/* Responsbile for hanlding received messages from clients and responding to them accordingly
if the message is an action done, it'll save it in the log file and notify the client
if the message is a query about the events, it'll call the private function queryHandler(); to handle it
returns negative on ERROR*/
int handle_message(int sockDescriptor, struct sockaddr_in *client, char *recvMessage);
我已经读过这个错误可能是因为在多行上写了一个预处理指令......但我没有。知道我做错了吗?
答案 0 :(得分:13)
问题是我在另一个位置声明了struct evt
。
答案 1 :(得分:12)
我认为您在前面的标题中有#define e 2.71828183
或其他一些内容。
要确定,请通过预处理器运行代码并查看输出。在gcc中是-E命令行开关
答案 2 :(得分:4)
我遇到了完全相同的问题,并发现struct evt
已在其他位置定义
答案 3 :(得分:0)
我会尝试稍微重命名这些功能。有时,如果其中一个标头定义了您使用的标记(例如“put_evt”),则预处理器将破坏您的代码。