9

私はこのヘッダーファイルを持っています...何らかの理由で 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);

このエラーは、前処理ディレクティブが複数の行に記述されているために発生する可能性があることを読みました...しかし、私はそれを持っていません。私が間違っていることは何か分かりますか?

4

4 に答える 4

15

問題は、私がstruct evt別の場所で宣言したことでした。

于 2012-05-10T21:23:18.133 に答える
13

#define e 2.71828183前のヘッダーに、またはそのようなものがあると思います。

確実に確認するには、コードをプリプロセッサで実行し、出力を確認します。-E コマンド ライン スイッチである gcc では

于 2012-05-03T16:55:14.153 に答える
0

関数の名前を少し変更してみます。ヘッダの 1 つが使用するトークン (「put_evt」など) を定義している場合、プリプロセッサがコードを壊してしまうことがあります。

于 2012-05-03T16:56:36.303 に答える