| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3691 人关注过本帖
标题:这两种语句,C++什么标准?
只看楼主 加入收藏
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用ditg在2020-6-28 21:27:31的发言:

好像一直就没C++什么事,反正从我知道的时候就要求必须有返回值,说不准从第一天开始它就这么要求的(感觉本贾啥事都干得出来,呵呵)。

楼上有一句话我很欣赏,出问题就是你本身的责任;虽然自己实力不济,但喜欢这种态度。我喜欢简单,条条框框少一点,编程都玩得快乐些。说实话,虽然自己不会这么写,但找个话题聊聊天也算打发疫情时间,近期着实有点闷。

自己平时喜欢看点内核代码,但进展偏慢,遇到不会的再向几位神级人物讨教,先谢了!

你搞反了
C++论坛 → 『 C++教室 』 → 这两种语句,C++什么标准?

讲道理应该是没C语言什么事情
提问者想了解的C++相关的内容
如果是其他问题 你混用C回复可能问题不大
刚刚好main这个问题上C/C++态度略有区别
你回答C语言 大体上算是答非所问


https://zh.
2020-06-29 09:22
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用rjsp在2020-6-28 21:52:19的发言:

我用gcc4.9.3测试,
$ gcc prog.c -Wall -Wextra -std=c89 报 warning: return type of 'main' is not 'int' [-Wmain]
$ gcc prog.c -Wall -Wextra -std=c99 报 warning: return type of 'main' is not 'int' [-Wmain]

看起来你好像回复错了
我知道gcc里面会报告这个warning
这和我的回复也没什么关系呀?

https://zh.
2020-06-29 09:24
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
我的大意吧,欢迎拍砖……
1.    c++编译器里,是否支持void main()形式?如果支持,我认为本贾有点矛盾,印象里他曾明确表示过这种形式肯定不是c++(顺便评说了一下C,说这种形式即使在C中出现也并不等于说就是C,这是他的个人观点)。
2.    推理c99标准中规定的main形式,应该只有一种int main(),当然参数表述方式可以有不同;至于返回值语句允许不写,交给编译器自动插入。
3.    龙芯cpu下gcc编译C程序出的警告信息,按r版说法是版本执行标准问题,但至少目前可以编译调试通过。
4.    我一直在讨论因程序返回值不确定进而导致的void main形式是否非法,请知悉。

梦想拥有一台龙芯3A-4000
2020-06-29 10:42
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用ditg在2020-6-29 10:42:10的发言:

我的大意吧,欢迎拍砖……
1.    c++编译器里,是否支持void main()形式?如果支持,我认为本贾有点矛盾,印象里他曾明确表示过这种形式肯定不是c++(顺便评说了一下C,说这种形式即使在C中出现也并不等于说就是C,这是他的个人观点)。
2.    推理c99标准中规定的main形式,应该只有一种int main(),当然参数表述方式可以有不同;至于返回值语句允许不写,交给编译器自动插入。
3.    龙芯cpu下gcc编译C程序出的警告信息,按r版说法是版本执行标准问题,但至少目前可以编译调试通过。
4.    我一直在讨论因程序返回值不确定进而导致的void main形式是否非法,请知悉。

1.
从标准描述和编译器实现来说 C++不支持void main这是事实 至于你说的本贾矛盾不矛盾和这个话题没什么关系 随便他怎么想 现实情况就是C++不支持void main
2.
C99中规定的main的形式 实际上不止限制返回值 还限制参数列表
严格来说 标准保证支持main只有2个形式 int main(void)和int main(int,char**)
其他实现是 实现定义 也就是标准没说不行 但不同编译器可以自由选择支持或者不支持
3.
我从来没说 C语言里面 void main编译不通过
问题是 仅仅是编译通过 这个要求不足以用于说明正确性
4.
void main是否非法 由标准决定
和程序返回值没什么必然联系 程序返回值更多是一个工程应用上的问题 不是决定是否非法的因素

C标准把这个决定权下放到编译器
不同编译器实现上有区别
常见编译器上基本都支持void main这个写法

C++标准直接规定非法

以上讨论仅仅针对宿主模式下的main
独立环境 比如内核编程 比如单片机 等等不适用以上描述

[此贴子已经被作者于2020-6-29 11:37编辑过]


https://zh.
2020-06-29 11:36
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
1. 好吧,拿一个人说明问题确实不恰当。
2. 想下一份标准看看,好像全要钱,标准具体怎么写的我也不知道。
3. C编译器能编译通过还不够吗?别扩大范围,return 8.5也是可行的,反正结果自己负责。
4. 又回到标准问题了,我还是保留意见,C和C++长期以来可能一直执行着不同的标准,有个c99,也可能还有个c++99;至于怎么看标准,我觉得在C下就是个最低实现,按你的引用,如果想叫C编译器,必须最低实现两种int main形式,其它什么void main、char *envp[]可以叫非标,编译器愿意支持就支持,不愿意支持也没啥,哪怕你支持double main;C++下变成了强制要求,你不写int main就不行,写其它的就算错。我觉得编译器不支持的,统称非法,因为不允许调试通过;返回什么值也不管,自己负责。

梦想拥有一台龙芯3A-4000
2020-06-29 13:14
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用ditg在2020-6-29 13:14:42的发言:

1. 好吧,拿一个人说明问题确实不恰当。
2. 想下一份标准看看,好像全要钱,标准具体怎么写的我也不知道。
3. C编译器能编译通过还不够吗?别扩大范围,return 8.5也是可行的,反正结果自己负责。
4. 又回到标准问题了,我还是保留意见,C和C++长期以来可能一直执行着不同的标准,有个c99,也可能还有个c++99;至于怎么看标准,我觉得在C下就是个最低实现,按你的引用,如果想叫C编译器,必须最低实现两种int main形式,其它什么void main、char *envp[]可以叫非标,编译器愿意支持就支持,不愿意支持也没啥,哪怕你支持double main;C++下变成了强制要求,你不写int main就不行,写其它的就算错。我觉得编译器不支持的,统称非法,因为不允许调试通过;返回什么值也不管,自己负责。

C编译器能编译通过还不够吗
不够
程序代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
    int n;
    scanf("%d", n);    
    return 0;
}

这样的代码也能编译
不过是错误的代码

https://zh.
2020-06-29 13:57
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
跟返回值有什么关系?

梦想拥有一台龙芯3A-4000
2020-06-29 14:49
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用ditg在2020-6-29 14:49:27的发言:

跟返回值有什么关系?

你问 C编译器编译通过还不够吗
这个例子就是在告诉的 编译通过的确还不够咯
void main 这个做法有潜在的出问题的风险
没必要也不应该写void main
写int main 又不会少块肉
没什么理由使用void main

https://zh.
2020-06-29 15:04
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
scanf("%d", n); 这条语句我认为本身并没有错。你说的是运行结果吗?我不知道你的,我的编译器不同情况下至少会提示段错误或类型错误。

"说实话,虽然自己不会这么写"--引前句

梦想拥有一台龙芯3A-4000
2020-06-29 18:57
cwa9958
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:76
帖 子:279
专家分:1367
注 册:2006-6-25
收藏
得分:0 
在vs2010 C++里,编译提示错误。
2020-07-09 15:21
快速回复:这两种语句,C++什么标准?
数据加载中...
 
   



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

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