【问题标题】:Missing declaration identifiers缺少声明标识符
【发布时间】:2012-09-25 16:51:26
【问题描述】:

我之前有一个关于这个主题的问题,但我提出了这个错误,我似乎没有注意到它有什么问题。我认为这可能在于将 args 分配给字符串。

编辑:

void replace(char* string_a, char* string_b, char* string_f)
{
}

int main(int argc, char *argv[])
{
     if(argc < 4)
     { 
         printf("Not enough arguments\n");
         return 0;
     }

     replace(argv[1],argv[2],argv[3]);
}

奇怪的是主函数必须在替换函数之后,否则编译器会报错。我必须查一下原因。

【问题讨论】:

  • C 不是这样工作的。最容易拿起一本好书,自学基础知识。
  • 我实际上正在阅读 Kernighan 的 C 编程语言,但我似乎找不到答案。也许你能告诉我这是怎么回事?我会很感激的。
  • 很多都是错误的,而且需要一个简短的答案来解释——任何明智的答案都相当于某种 C 教程。对于初学者,您不能在其他函数中声明函数。

标签: c


【解决方案1】:

这是无效的 C:

 char string_a[] = argv[1];

在编译时,编译器永远无法计算出存储argv[1] 需要多少内存。所以这是不可能的。

但是,argv[1] 是一个指针,您可以将正确类型的变量分配给指针。所以你可以这样做:

const char *string_a = argv[1];

但是,argv[1]string_a 现在都由完全相同的内存块支持。 (而且这个内存可能是只读的)。

【讨论】:

  • 我已经修复了指针问题,但我仍然收到完全相同的错误。
  • 再看一遍:void replace(argv[1],argv[2],argv[3]) { 不是你做函数声明的方式。函数声明中的参数应该是类型......我个人是@Kerrek SB 评论的粉丝。这是非常基础的 C 知识,任何一本书都会介绍。
  • 这是我之前的帖子*.com/questions/12585398/…
【解决方案2】:

做这样的事情:

int main(int argc, char *argv[]) {   
    if(argc < 4) {
        printf("Not enough arguments\n");
        return 0;
    }

    string s=argv[1];
    string s1=argv[2];
    string s2=argv[3]; 
    replace(s,s1,s2);    
} 

void replace(s,s1,s2) { 
    //statements
}

【讨论】:

  • 那是C++,也提到了C。此外,您仍然会有错误的函数声明。
  • 我决定做类似的事情。但只是传递所有参数并在替换时声明正确的类型,并在主函数之外进行替换。希望它有效。