繁体   English   中英

错误:'DATA / *之前的期望表达式:typedef struct DATA DATA * /

[英]Error : Expected expression before 'DATA /* : typedef struct DATA DATA */

我不知道这是什么问题,我的代码。 我读了其他一些有同样问题的问题,但没有找到答案。 当我尝试编译时,出现以下错误:

||在函数“ main”中:|

| 35 |错误:“ DATA” |之前的预期表达式

||在函数“ lecture_data”中:|

| 59 |错误:“ DATA” |之前的预期表达式

|| ===构建失败:2个错误,0个警告(0分钟,0秒)=== |

我也想知道我应该做些什么,如果还有其他问题我应该在这段代码中什么也不做。

编码 :

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    #define V 20

    /* Structure */

    typedef struct DATA{
        char* NomP;
        char* NomA;
        int iNbr;
        int iPix;
        struct DATA *Next;
    }DATA;

    /* --------- */

    void* MALLOC(size_t nombre);
    int lecture_data(FILE *fs,DATA* Data,DATA* ROOT);
    void print_data(DATA* data,int len);

    int main(void)
    {
        char FileName[V];
        puts("Data file ? : ");
        gets(FileName);

        FILE* fs = fopen(FileName,"r");
        if( fs == NULL )
        {
            perror("Error ");
            exit(EXIT_FAILURE);
        }

        DATA *HEAD = MALLOC(sizeof DATA);
        DATA *D_Store;
        int len = lecture_data(fs,D_Store,HEAD);
        print_data(D_Store,len);
        return 0;
    }

    int lecture_data(FILE *fs,DATA *Data,DATA *ROOT)
    {
        char cNom[V],cArticle[V];
        int iNombre,iPrix;
        int eofs=0;int i=0;

        while(!eofs)
        {
            fscanf(fs,"%s %s %d %d",cNom,cArticle,&iNombre,&iPrix);
            Data->iNbr=iNombre;
            Data->iPix=iPrix;
            Data->NomA = MALLOC(strlen(cArticle)+1);
            Data->NomP = MALLOC(strlen(cNom)+1);
            strcpy(Data->NomA,cArticle);
            strcpy(Data->NomP,cNom);
            if( i==0 )
            {
                Data -> Next = MALLOC(sizeof DATA);
                ROOT = Data ;
            }
            DATA *Ptr = ROOT ;
            while( Ptr -> Next != NULL )
            {
                Ptr = ROOT -> Next;
            }
            Data -> Next = NULL ;
            Ptr -> Next = Data ;

            fprintf(stdout,"Data : N.%d: %s %s %d$\n",i,cNom,cArticle,iNombre*iPrix);
            i++;
            eofs = feof(fs) ;

            if(ferror(fs))
            {
                perror("Error ");
                exit(EXIT_FAILURE);
            }
        }
        fclose(fs);
        return i;
    }

    void* MALLOC(size_t nombre)
    {
        void *MEMEORY = malloc(nombre);
        if(NULL == MEMEORY )
        {
            perror("Error ");
            exit(EXIT_FAILURE);
        }
        return MEMEORY;
    }

更改

DATA *HEAD = MALLOC(sizeof DATA);

DATA *HEAD = MALLOC(sizeof (DATA));

sizeof运算符的类型名称操作数必须加括号。

采用

DATA *HEAD = MALLOC( sizeof( DATA ) );

代替

DATA *HEAD = MALLOC(sizeof DATA);

sizeof运算符的定义如下

sizeof unary-expression
sizeof ( type-name )

如您所见,类型名称应括在括号中。

根据C标准(6.5.3.4 sizeof和alignof运算符)

2 sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的括号名称

考虑到如果e是一个表达式,则( e )也是一个表达式。 因此,对于表达式,您可以编写

sizeof e

要么

sizeof( e )

变量的标识符也构成一个表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM