13 votes

Identificateur attendu ou '(' avant une constante numérique ?

J'ai ce fichier d'en-tête ... pour une raison quelconque, je reçois une erreur disant log_server.h:48: erreur: identifiant ou ‘(’ attendu avant une constante numérique Je reçois cette erreur sur les deux lignes définissant les fonctions put_evt et print_evt_list, voici à quoi ressemble le code :

#ifndef _GENERIC
#define _GENERIC
#include 
#include 
#include 
#include 
#include 
#endif

#ifndef _NETWORKING
#define _NETWORKING
#include 
#include 
#include 
#include 
#include 
typedef struct sockaddr SA;/* Pour rendre la conversion dans (bind, recvfrom, sendto) plus lisible */
#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;
};

/* ouvrir le fichier journal pour ajouter les événements à sa fin
 * renvoie 0 en cas de réussite et -1 en cas d'échec (le fichier n'a pas pu être ouvert)
 */
int init_log(const char *log_fname);

/* ferme le fichier journal
 * renvoie 0 en cas de réussite et -1 en cas d'échec (le fichier n'a pas pu être ouvert)
 */
int terminate_log();

/* ajouter un nouvel événement dans le fichier journal
 * renvoie 0 en cas de réussite et -1 en cas d'échec
 */
int put_evt(struct evt *e);

/* obtenir la liste des événements survenus après l'heure donnée
 * count est la taille de la liste e allouée et passée
 * renvoie le nombre d'événements trouvés en cas de réussite et -1 en cas d'échec
 */
int get_events(struct evt  *e_list, long int time);

/* imprimer les informations de l'événement donné (nom, heure) */
void print_evt(struct evt  *e);

/* imprimer les informations de "compte" événements à partir des informations de la liste e données (nom, heure) */
void print_evt_list(struct evt  *e_list, int count);

/* startListen prend un numéro de port et renvoie un descripteur d'écoute en cas de succès ou un nombre négatif en cas d'erreur */
int startListen(int port);

/* Responsable de la gestion des messages reçus des clients et de leur réponse en conséquence
si le message est une action effectuée, il sera enregistré dans le fichier journal et informera le client
si le message est une requête sur les événements, il appellera la fonction privée queryHandler(); pour le gérer
renvoie un nombre négatif en cas d'ERREUR */
int handle_message(int sockDescriptor, struct sockaddr_in *client, char *recvMessage);

J'ai lu que cette erreur peut être causée par le fait d'avoir une directive de prétraitement écrite sur plus d'une ligne ... mais je ne l'ai pas. Une idée de ce que je fais de mal?

18voto

Varda Elentári Points 1013

Le problème était que j'avais struct evt déclaré à un autre emplacement.

14voto

Je pense que vous avez #define e 2.71828183 ou quelque chose de similaire dans les en-têtes précédents.

Pour en être sûr, exécutez le code à travers le préprocesseur et regardez la sortie. Dans gcc, c'est l'interrupteur de ligne de commande -E

5voto

Killua Points 81

J'avais exactement le même problème, et j'ai réalisé que struct evt était défini à un autre endroit

0voto

Nathan Wiebe Points 746

Je tenterais de renommer légèrement les fonctions. Parfois, si l'une des entêtes définit un jeton (tel que "put_evt") que vous utilisez, le préprocesseur va dénaturer votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X