罪行1
for(int i = 0; i < 1; i++);
for(int i = 0; i < 1; i++);
出现编译错误:i重定义。
这个罪行倒还不算重,因为有一种方法可以化解
#define for if(0);else for罪行2
void f1(){}
void f2(){return f1();}
这样也编译错误: 'void' function returning a value
当年VC6的编译器作者真是脑袋有屎
for(int i = 0; i < 1; i++);
for(int i = 0; i < 1; i++);
出现编译错误:i重定义。
这个罪行倒还不算重,因为有一种方法可以化解
#define for if(0);else for罪行2
void f1(){}
void f2(){return f1();}
这样也编译错误: 'void' function returning a value
当年VC6的编译器作者真是脑袋有屎
解决方案 »
- 讨论下,同一工程编译的目标文件MD5值为什么不同
- 关于串口取数据的疑问
- 很难也,enter,回车过程
- 求:读文件修改时间之方法
- 帮我配电脑啊!!
- 想做一程序通过usb口将数码相机的照片取到电脑上,该如何控制usb通讯呢?
- 怎么把 ActiveX 代表控件大小的矩形边框去掉?
- 用VC建立数据库工程时,为什么会出现"visual database tools is not configered properly,please reinstall"的错误提示?如何解决?
- 请问如何在VC的函数中传递不确定类型的参数?
- 如何防止改变子框架窗口的大小
- 目录浏览对话框
- 急!如何创建一个固定大小的ActiveX控件?
罪行2:void 如何 return ?
1、屏蔽重复定义可以在其中一个for循环外部加大括号:
{
for(int i=0; i<2; i++)
{
}
}for(int i=0; i<2; i++)
{
}2、一般对于返回值为void的函数,要么通过return 返回,要么通过另一个void 函数返回。直接调用就可以了,为什么还要加一个return 呢?
debug到for(int i = 0; i < 1; i++);
之后,你看看就会发现i=1。只能说是一种习惯吧。C#里边的作用域就不是这样的了。
for(int i = 0; i < 1; i++);
for(int i = 0; i < 1; i++);
在C#里边就不会报错了。
这个c++之父的著作, c++程序设计语言提到这个问题了
允许返回void主要是为了模版的需要(呵呵,可能这么说的,原话忘记了,
大家去看看函数那章,找返回值部分)
在vs.net里面已经可以了。
请大家去看看GCC cygwin VC7的结果吧。
在cygwin中就算return void(0);都是可以通过的。很多人都不明白为什么void 也想要return一个东西。
我觉个例子:
//代码一
void f1(){}
void f2()
{
if (something)
{
f1();
return;
}
}
//代码二
int f1(){}
int f2()
{
if (something)
{
return f1();
}
}
代码一与代码二分明就是在执行同样的任务,可以因为VC6的这一罪行,我无法把它们合并。
迫使程序员在几个不同的地方维护相同内容的代码,这是对劳动力的极大浪费。这还不算罪大恶极吗?
代码2既然不能编译通过,你又用它干么?合并是基于代码可以工作这个前提的。
return f1()每个人都可以理解成f1();return;?至少用VC6的会认为代码有误。
这一点无论是从理论(void 本身就可以理解成一种类型),
方便性(简化代码书写、可利用模版),还是从标准(ISO/IEC 14882)来看,都是VC6的失败。原来思维的局限不仅仅会因为编程语言,还会因为编译器的缺陷。
其实VC本来就不是标准ANSI C编译器。
还没有改掉这个缺陷阿楼主?
赶快找微软反映一下,以便解决全球程序员遇到的这么严重问题!!编译器是死的,人是活的.
呵呵想起哲学老师讲过的一句话!什么什么是不以人的意识为转移的。呵呵
变通变通拉
其实,道理一样。微软的东西设计之初并没有ANSI表准啊,延续下来也是很自然的事情。至于能不能返回void的讨论这件事情本身并没有太大的意义,你可以有自己编码的风格,微软也可以有自己的编译器风格。何况这个并不是致命的错误,而且大多数的程序员都会避免这样暧昧的用法的。
而且在.net中微软也正在向ANSI规则靠拢。楼主没必要钻牛角尖了。
或者就是vc6自己当时弄了一套标准,这个标准和目前C++标准有冲突。hopen(哈雷) 的后半句很有道理!
------------------------------------
CSDN新版论坛助手:【YY专用版】
你没有看到的地方还有更多呢。
下面的程序你用别的编译器可以运行,但VC 就不行。#include <stdio.h>main()
{
float a;
scanf("%f", &a);
}还有下面的程序,在TC2.0 下面可以,但在 VC下面正常。
main()
{
float a[2][2];
scanf("%f", &a[0][0]);
printf("%f", a[0][0];
}几乎没有哪个编译器是完美无缺的。
下面的程序在TC 下面出错,但在VC 下面正常:
#include <stdio.h>test(float a[][5])
{
scanf("%f", &a[0][0]);
}main()
{
float a[5][5];
test(a);
printf("%f", a[0][0]);
}
三条裤衩,好厉害
理解方式的问题,做出的东西有问题不是我说的重点,我是在做类比,恩,类比
我们与客户的关系,正如微软与我们的关系一样
客户对产品的不满意是对的-------------------没错吧
产品的改进是建立在客户需求的基础上的-------也没错吧
产品的改进不是必要的-----------------------要结合成本,这点你绝对同意
如果你作为客户本身都不能提出自己的合理要求,那么怎么能够要求你自己成为一个合格的产品生产者呢---------------------------------我自己的都能凑活,客户也将就吧以上不得不得推论出一个结果,我们绝大多数(也许不包括你)的程序员没有一个很好的职业素养
包括我自己,那么为什么我们的软件行业不如美日印,大家可以和我一起思考——话题有些太大了,不过你不认识我,对不,所以我也就不害臊了
for(int i = 0; i < 1; i++);
我一直是按c#的作用范围理解的,可是我考试时候,老师给了我零分!
这是由于微软的愚蠢,带给我的伤害! 呵呵!
很高兴和你探讨,但是也没必要对我进行任何的讽刺。从我忍受微软的产品这一试试推断出我对于我的客户的态度从逻辑上并不严谨。我先再重申一次,之所以不赞同楼主对于VC IDE开发人员的批评是基于两点:1,VC/MFC开发的时候ANSI的标准还没有出台;2,.NET里边已经对这些问题进行了修改。不知道你对于这两点的看法如何?好了,注意上面说的第2点,至少说明微软的东西还是在改进中,至于为什么没有在VC6的SP6里边改正这个,做程序员的应该清楚,有些时候可能作新版本的比打补丁更方便。最后,
“如果你作为客户本身都不能提出自己的合理要求,那么怎么能够要求你自己成为一个合格的产品生产者呢---------------------------------我自己的都能凑活,客户也将就吧”
说的很有现实意义,但是拿我们自己写的东西和微软发布的产品相比又不适合了。对于大多数的中国程序员来说,从事的工作可能是外包性质的吧?也就是说软件的评价是跟客户需求直接相关的。而微软的VS却并不是这样的东西。首先,它的设计时间比较早,而楼主提出的合理要求的理论根据却是在其之后。其次,VS的开发对于客户的需求是建立在泛泛的基础上的,虽然也是需求的产物,但跟国内的外包性质的软件开发性质截然不同。
也因此于微软的产品如果不是大的漏洞(楼主所说的罪行,愚实在不认为是大漏洞)我的确也就没有提出自己的合理要求,也就“凑合”了。但是,恐怕这个也不能成为你臆测我没有要求自己成为一个合格的产品生产者的一句吧?
第一个问题很恶心。
第二个问题,和标准CPP不一致。
vc6 和vc。net是一个东西么,我用的是盗版(先不谈这个我知道不对),不知道是不是免费升级,那么我作为一个用户对这个产品有不满,你又不解决,告诉我新的出来了,自己去买,我找个地骂两句有什么不对的,我说的全是事实阿,至于你说的先后,再举个极端的例子;我以前用的电脑不支持3c,但是现在你再卖同样的电脑是不是就说不过去了(标准分强制和非强制)
”恐怕这个也不能成为你臆测我没有要求自己成为一个合格的产品生产者的一句吧?“
这个我从来没有臆测过,我臆测(这个也是个贬义词吧),但是同样作为一个消费者,对其他消费者的不满行为大加评论,有这个必要么,ms的东西越好,对你应该越有利阿,你为什么不要呢??回答我
有个子程序中有如下语句
char a;
for(i=0;i<=10;i++)
{
scanf("%c",&a);
}
结果其中的scanf语句不是每个循环都被执行,而是每隔一个循环才被执行一次
即使此语句不是放在for循环中,当子程序被多次调用时,也是隔一次才执行此语句
即使把scanf语句换成getc,或者是gets也是如此
我认为是因为你用"%c"所以每次只读取一个字符,而通常输入时会输入一个字符再“回车”一次,这个回车占去了一个循环,所以表象就是“每隔一个循环才被执行一次”
ms不支持标准的理由;
1,不直接面对用户——那他卖吗?
2,跟软件开发性质有关——不好说吧
3,它的原始版本比标准更早出来——那要标准这种东西干吗
4,他家卖的另一个更好,已经支持了——vc6不卖了?就算不卖也有个售后问题啊¥%……#
反正也得罪人了,干脆干到底吧至于我从“反对对Ms不满”判断有些人“没有要求自己成为一个合格的产品生产者”这一点(鼓掌,舌头没乱)解释一下:打车时候听师傅说:我确实没违章,但我跟谁说去阿,到交警支队去,1天就少挣300,干脆就认了。
存车丢了,家里人都怪我,那小偷就没一点错了么?
这算不算一种可悲,明明道理在我这边,我却不能去讨个公道,反而还要受到各种批评
而更可悲的是那些批评我的人,当你习以为常了,错了就能变成对了么大家不觉得自己少了些斤斤计较,少了些应该有的勇气么这些话有些激烈,今天刚因为工资问题和上面吵架,大家见谅
你看看其他的c++编译器,都完全符合标准?
我想楼主骂人的话也就是气话,大家没必要用这个做文章吧, 这点pomelowu(羽战士)也算是钻牛角尖了”VC6却不会因为这两个问题而被认为是不合格的产品“,这个产品没人说不合格,一直是在说有错误这个问题确实是小,我还真没注意,而且我也不会这么用,我用的也是vc7了,就是不太熟你可以不追究阿,别人可以追究阿,你的意思表达了,我的意思表达了,大家都来表达阿,为什么要批评说话的人呢,他的意思错了么,错了就不能说了么,说了就一定对么,那岂不是又要谁先说谁老大了,还是再制定个说话的标准,我都疯了
不过可以用的时间长了,总的来说还可以吧
void f2(){return f1();}既是void,你还return干嘛?自己规范些啊。
这是小问题哦。
void f1(){}
void f2(){return f1();}既是void,你还return干嘛?自己规范些啊。
这是小问题哦。
"
他是想执行在f2中f1()函数.
有的老外喜好写这么怪异的东西。