首页 > 解决方案 > 函数被重新声明

问题描述

 #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()仍然可以正常工作。如果有人可以帮助我,我将不胜感激。

标签: cfunction

解决方案


si_quote在一个地方和另一个地方si_qoute。这些不相等。

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


推荐阅读