标题:请教高手编译器(Microsoft Visual C++ 2010 Express)的问题
只看楼主
chrisgardner
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:73
专家分:114
注 册:2013-9-25
结帖率:100%
已结贴  问题点数:20 回复次数:8 
请教高手编译器(Microsoft Visual C++ 2010 Express)的问题
工具:Microsoft Visual C++ 2010 Express
做了一个练习,功能是判断一个数是否为素数,但是发现函数返回值的类型定义为 bool 型时总是报错 : error C2061: 语法错误: 标识符“IsPrime”   将函数返回值的类型定义为 int 型时不再报错,能顺利通过,请教高手,这是编译器的问题吗?该如何设置?

#include <stdio.h>
bool IsPrime(int val)   //就是在这里报错,改为 int 型时不再报错
{
    int i;

    for (i=2;i<val;++i)
    {
        if (val%i == 0)
            break;
    }
    if (i == val)
        return true;
    else
        return false;
}

int main(void)
{
    int m;
    scanf_s("%d",&m,1);
    printf("\n");

    if ( IsPrime(m) )
        printf("%d是素数\n\n",m);
    else
        printf("%d不是素数\n\n",m);

    return 0;
}
搜索更多相关主题的帖子: Microsoft include 编译器 return 
2014-03-18 13:03
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:3 
说清楚点,尤其应把错误信息贴全点

另外,bool 不是 C语言的内建类型,_Bool 才是
除非你 #include了<stdbool.h> 了,其中才有 #define bool _Bool
当然,最重要的是,一切版本的VC都不支持C99,别说你是VC2010了,就是VC2013也没用
2014-03-18 13:51
chrisgardner
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:73
专家分:114
注 册:2013-9-25
得分:0 
回复 2楼 rjsp
我是照着网上一个叫 郝斌 出的视频做的,他用的是VC6.0,没有问题,为什么版本高了,同样的程序就有问题,是设置的问题吗?之前的 scanf 就要换成 scanf_s才行。

错误信息是这样的:

1>------ 已启动生成: 项目: Code from the Video, 配置: Debug Win32 ------
1>  111.c
1>g:\project\code from the video\111.c(3): error C2061: 语法错误: 标识符“IsPrime”
1>g:\project\code from the video\111.c(3): error C2059: 语法错误:“;”
1>g:\project\code from the video\111.c(3): error C2059: 语法错误:“类型”
1>g:\project\code from the video\111.c(24): warning C4013: “IsPrime”未定义;假设外部返回 int
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
2014-03-18 14:20
lonely_21
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:108
专家分:395
注 册:2011-11-13
得分:8 
会不会别人建的是.cpp文件,你建的.c文件?
2014-03-18 14:37
chrisgardner
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:73
专家分:114
注 册:2013-9-25
得分:0 
回复 4楼 lonely_21
楼主正解,他确实是.cpp的后缀,我的是.c的后缀,厉害!

[ 本帖最后由 chrisgardner 于 2014-3-18 14:42 编辑 ]
2014-03-18 14:39
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:3 
以下是引用rjsp在2014-3-18 13:51:45的发言:

说清楚点,尤其应把错误信息贴全点

另外,bool 不是 C语言的内建类型,_Bool 才是
除非你 #include了 了,其中才有 #define bool _Bool
当然,最重要的是,一切版本的VC都不支持C99,别说你是VC2010了,就是VC2013也没用

VC的标准还是C89 C99部分支持。。
2014-03-18 15:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
以下是引用zklhp在2014-3-18 15:45:27的发言:


VC的标准还是C89 C99部分支持。。

VC的C编译器是98年之前写的,此后一直未对语法进行过更新。所以,它肯定不可能 支持 或 部分支持 C99,因为它都不认识C99。
VB和C中都有if关键字,不能说VB部分支持C语言。
2014-03-18 16:09
lonely_21
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:108
专家分:395
注 册:2011-11-13
得分:0 
回复 5楼 chrisgardner
那就是喽,C不识别bool
2014-03-18 16:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:6 
以下是引用chrisgardner在2014-3-18 14:39:17的发言:

楼主正解,他确实是.cpp的后缀,我的是.c的后缀,厉害!

說過無數次的問題,VC++是C++編譯器,它憑什麽非要守所謂的C99標準?C99的新東西大多數就是抄襲C++舊編譯器早已經有的東西,bool是C++問世以來就有的內置數據類型。非要用C編譯器,用回TC唄,TC++都不要用。

[ 本帖最后由 TonyDeng 于 2014-3-18 19:17 编辑 ]

授人以渔,不授人以鱼。
2014-03-18 19:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-428714-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021373 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved