Erreur de compilateur en C: taux de ')' avant '*' token
Comme le dit le titre, reçois cette erreur lorsque vous essayez de compiler. De Googler cette erreur les gens ont dit qu'il n'est pas déclarée dans le fichier d'en-tête, mais ma fonction est statique et il n'est pas dans un fichier d'en-tête, j'ai prototypé il.`
#include <recGbl.h>
#include <devSup.h>
#include <devLib.h>
#include <drvIpac.h>
#include <dbScan.h>
#include <epicsExport.h>
static int cardinit(cardinfo *card); //<-- line that gives the error
typedef struct cardinfo{
struct cardinfo *next;
struct io_mem_read *pMem; /* IP register (A16) mem address */
word *rambase; /* RAM conversion memory mem address*/
int isconfigured;
int doram; /* 1 if we are using the RAM to output data.
0 if we are writing to registers (AO style) */
int cardnum;
int vmeslotnum;
int ipslotnum;
/* these values mirror the hardware registers */
word csr;
word offset;
word numconv;
word clockrate;
word vectnum;
word dacval[MAXSIGNAL];
word oldispresent;
/* used to detect a reinsertion of a carrier card.
see subroutine ispresent() below. */
/* use to update process variables */
IOSCANPVT ioscanpvt;
} cardinfo;
static int Hy8402init(int vmeslot, int ipslot, int clockrate) {
cardinfo *card;
card->vmeslotnum = vmeslot;
card->ipslotnum = ipslot;
card->cardnum = 1;
card->clockrate = clockrate;
card->vectnum = 10;
cardinit(card);
return TRUE;
}
static int cardinit(cardinfo *card){
word rprobe;
int res;
volatile word *ramptr;
card->pMem= ipmBaseAddr(card->vmeslotnum,
card->ipslotnum,ipac_addrIO);
if (card->pMem==NULL){
printf("Error in %s",devstr);
printf( "%s: Cannot determine base address\n",devstr);
return FALSE;
}
res=devReadProbe(sizeof (word),(char *) card->pMem,(char *) &rprobe);
if (res!=OK){
printf("%s: NO DEVICE at %x (vmeslot %d, ipslot %d)\n",devstr,
(int)card->pMem,
card->vmeslotnum,card->ipslotnum);
return FALSE;
}
return TRUE;
}
`
Vous devez vous connecter pour publier un commentaire.
cardinfo struct est toujours pas défini sur la ligne avec l'erreur. Mettre de l'avant d'une déclaration avant:
static int cardinit(struct cardinfo *card);
avec la déclaration anticipée. Est-ce encore le cas en C99?Cette ligne de code:
devrait être ajouté après la définition de votre cardinfo structure.
Vous avez besoin pour mettre la ligne
après la définition de la
cardinfo
structure.À cette ligne, le compilateur ne sait pas encore que cardinfo est une struct. Faites-le précéder la ligne
struct cardinfo;
Vous avez déclaré une fonction qui est une variable d'entrée de type, le compilateur n'est pas conscient lorsqu'il analyse. j'.e la structure de la définition qui suit votre déclaration de fonction.
Merci donc de faire une déclaration anticipée de la structure lorsque vous souhaitez compiler ce code.
Ce lien a un bel article sur quand plein les déclarations ne sont pas nécessaires.