重新声明功能

时间:2020-10-13 12:41:48

标签: c function

 #include<stdio.h>
 #define        MAX     10000 
 #define        CHECK   1000 
 #define        OPN     1
 #define        CLS     0
 char program[MAX];
 void si_qoute (void);
 void do_qoute (void);
 void getprogram (void);
 int main(){
     printf ("Type your code\n");
     getprogram ();
     si_quote ();
     do_quote ();
     return 0;
 }

 void si_quote (void){
     int opn[CHECK], cls[CHECK], i, lcnt = 0, opn_cnt = 0;
     for (i = 0; i < CHECK; i++)
          opn[i] = cls[i] = 0;
     for (i = 0; program[i] != '\0'; i++){
         if (program [i] == '\n')
             lcnt++;
         if (program[i] == '\''){
             opn[opn_cnt] = lcnt;
             if (program[i + 1] == '\\' &&  program[i + 3] =='\''){
                 cls[opn_cnt++] == lcnt;
                 i += 3;
             }
        else if(program[i + 2] == '\''){
            cls[opn_cnt++] == lcnt;
            i += 2;
        }
        else
            opn_cnt++;
    }
}
opn[opn_cnt] = -1;
for(i = 0; opn[i] != -1; i++)
    if (opn[i] && cls[i] == 0)
       printf ("Single Quote opened at line %d not closed \n", opn[i]);
}
void do_quote (void){
    int opn[CHECK], cls[CHECK], i, lcnt = 0, opn_cnt = 0;
    for (i = 0; i < CHECK; i++)
        opn[i] = cls[i] = 0;
    for (i = 0; program[i] != '\0'; i++){
        if (program[i] == '\n')
           lcnt++;
        if (program[i] == '\"'){
            opn[opn_cnt] = lcnt;
            while (program[++i] != '\"'){
                if (program[i] == '\\' && program [i + 1] == '\"')
                    i++;
                else if (program[i] == '\n'){
                        opn_cnt++;
                        lcnt++;
                    break;
                }
            }
            if (program[i] == '\"')
                cls[opn_cnt++] = lcnt;
        }
    }
    opn[opn_cnt] = cls[opn_cnt] = -1;
    for (i = 0; opn[i] != -1; i++)
        if (opn[i] && cls[i] == 0)
            printf ("Double inverted quoted opened at %d not closed \n", opn[i]);
}

void getprogram (void){
    int i, c;
    for (i = 0; i < MAX - 1 && (c = getchar()) != EOF; i++)
        program[i] = c;
    program[i++] = '\n';
    program[i] = '\0';  
}

我遇到了错误,该错误指出了两个函数si_quote()do_quote()的隐式声明。我打算做的是从main调用这些函数。据我所知,在调用函数时,我们需要尝试在括号内编写函数名称以及参数列表。但是,由于这些函数不接受任何参数,因此参数列表为空。我认为函数可能会被重新声明为int作为其返回类型。我不明白这到底是什么问题。如果按照我的猜测重新声明了它,为什么getprogram()仍然可以正常工作。如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您将si_quote放在一个地方,将si_qoute放在另一个地方。这些不相等。

这种简单的错字使编译器认为您声明(但不使用)两个函数,并使用(但不声明)另外两个完全不相关的函数。