错误:预期标识符或全局变量中的'('

时间:2015-11-11 06:44:37

标签: c strtok

我在编译处理期间遇到了这个错误。 我之前已经在这个网站上看到过这个错误,我觉得这个错误可能发生在;或者有些东西在错误的地方。但我找不到。

Screenshot

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define MAX 80

typedef struct assemble
{
    int op;
    int ni;
    int xbpe;
    int addr;
}Assemble;


void get_token(char *bp);
int hTod(char *dp);
int bTod(char *dp);
void codeBreak(char *cp);
void result(int t);


Assemble asm;
int type;


int main()
{
  FILE *fp;
  char buf[MAX];

    if( (fp = fopen("inst.txt","r")) == NULL ){
    fprintf(stderr, "file not found...\n"); exit(1);
    }
    while(fgets(buf,sizeof(buf),fp) != NULL){
         get_token(buf);
    }

    fclose(fp);
    return 0;
 }

 void get_token(char *bp)
 {
    char    *cp;
    int i = 1;

    for(cp=strtok(bp, " \t\n"); cp != NULL; )
    {

        if( (*(cp+0) == '0') && (*(cp+1) == 'x') )
        {
        if( i == -1 )
            asm.addr = hTod(cp);
        if( i == 1)
                asm.op = hTod(cp);
        i *= -1;
        }
        else
        {
        codeBreak(cp);
    }

     cp = strtok(NULL, " \t\n");
    }

result(type);
 }


 void codeBreak(char *cp)
 {

    if ( strlen(cp) == 2 )          // ni 판단
    {
    asm.ni = bTod(cp);
    }
    else if( strlen(cp) == 1 )
    {
       asm.xbpe = bTod(cp)*pow(2,3);    
       type = 1;
    }
    else if( strlen(cp) == 4 )
    {
    if( *(cp+3) == '1')     
    {
        asm.xbpe = bTod(cp);
        type = 2;
    }
    else
    {
        asm.xbpe = bTod(cp);
        type = 3;
    }
   }
 }

 void result(int t)
 {
    switch(t)
    {
     case 1 : printf("0x%x%x\n", (asm.op+asm.ni), asm.addr); break;
     case 2 : printf("0x%x%x%.5x\n", (asm.op+asm.ni), asm.xbpe, asm.addr); break;
     case 3 : printf("0x%x%x%.3x\n", (asm.op+asm.ni), asm.xbpe, asm.addr); break;
     default : break;
     }
   }


    /* Hex to decimal */
    int hTod(char *dp)
    {
        int i;
        int dec = 0; 

         for( i=2 ; i < strlen(dp) ; i++)
          {
            switch (*(dp+i))
             {
              case 'a' : *(dp+i) = 58; break;
              case 'b' : *(dp+i) = 59; break;
              case 'c' : *(dp+i) = 60; break;
              case 'd' : *(dp+i) = 61; break;
              case 'e' : *(dp+i) = 62; break;
              case 'f' : *(dp+i) = 63; break;
              }

          dec += (*(dp+i)-48) * pow( 16, (strlen(dp)-(i+1)));   

        } 
       return dec;  
      }

        /* binary to decimal*/
        int bTod(char *dp)
        {
            int i;
             int    dec = 0;

            for( i = 0; i < strlen(dp) ; i++)
            {
                dec += (*(dp+i)-48) * pow( 2, (strlen(dp) - (i+1)));    
             }
              return dec;
          }

1 个答案:

答案 0 :(得分:4)

asm是一个关键字。而不是

Assemble asm;

使用不同的东西,例如:

Assemble asm1;

编译器报告的问题虽然不同。你似乎已经使用了

ASSEMBLY asm;

在您编译的代码中。

相关问题