【问题标题】:error C2065: 'cp' : undeclared identifier [closed]错误 C2065:“cp”:未声明的标识符 [关闭]
【发布时间】:2013-03-30 02:15:59
【问题描述】:

我是C新手,我在网上找到了这个关于字符串和数组的教程,并尝试做这个程序。他们正在使用 Eclipse,而我正在使用 Visual Studio 2010 ...请帮助和解释。 我遇到了这些问题:

error C2143: syntax error : missing ';' before 'type'
error C2143: syntax error : missing ';' before 'type'
error C2143: syntax error : missing ')' before 'type'
error C2143: syntax error : missing ';' before 'type'
error C2065: 'cp' : undeclared identifier
error C2100: illegal indirection
warning C4552: '!=' : operator has no effect; expected operator with side-effect
error C2059: syntax error : ')'
error C2065: 'cp' : undeclared identifier
error C2143: syntax error : missing ';' before '{'
error C2065: 'cp' : undeclared identifier
error C2100: illegal indirection

这是代码:

#include <stdio.h>
#include <conio.h>


int main(char argc, char**argv){
    char s[] = "string";
    printf("string is: %s\n", s);

    for(char *cp = s; *cp !=0; ++cp) {
        printf("char is %c\n", *cp);
    }
    getch();
}

【问题讨论】:

  • vs2012 对此很满意 :)
  • 旁注:将char argc 更改为int argc
  • @gongzhitaao 有什么编译器?
  • @Perception 它行不通
  • 我认为您正在使用 C89 编译器运行。不允许像 for 循环这样的 inline-decls。

标签: c arrays string visual-studio-2010


【解决方案1】:

Microsoft 的 C 编译器仅实现 C90 标准(加上一些扩展)。它不完全支持较新的 C99 或 C11 标准。请参阅(并投票!)this bug report on MS Connect 以鼓励他们添加对现代 C 的支持。编译器团队的This blog entry 也包含一些相关信息。

但是,结果是您不能在 for 循环的初始化中声明变量。事实上,你可以声明变量的唯一地方是在一个块的最顶部。

如果将cp 的声明移到方法块的顶部,它将编译得很好。

int main(char argc, char**argv){
    char s[] = "string";
    char *cp = s;//move to here

    printf("string is: %s\n", s);        

    for(; *cp !=0; ++cp) {
        printf("char is %c\n", *cp);
    }
    getch();
    return 0;// you should return some value
}

或者,您可以在函数体中引入新的块作用域。

【讨论】:

  • 其实从 C99 开始就有了。而如今,C 已经是 C11。
  • Microsoft C 编译器只支持 c89(和一些扩展)
  • @Zoidberg 抱歉。我的错误,但似乎问题是由这种语法引起的。也许他的编译器不支持这种语法。
  • @nos 是的,标准很好,但现实却很痛苦..哈哈
  • @zoujyjs 我试过这样做,但它不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2011-04-16
  • 2011-04-16
  • 2010-12-24
  • 2023-03-04
  • 2011-03-02
  • 2011-12-22
相关资源
最近更新 更多