一个专科的 C 语言期末考试题,我居然不知道咋做。

2017-07-03 17:08:40 +08:00
 coderluan

https://ws2.sinaimg.cn/large/006Svwogly1fh6t12pt42j30ti0sfq4v.jpg

原谅我标题党,朋友发的,出题者口口声声说这是书上找的,肯定不会错,专科生中能干好这一行的也是不容易。

5351 次点击
所在节点    问与答
58 条回复
coderluan
2017-07-03 19:05:10 +08:00
@hjc4869 #31 亲,你是试的,还是有啥知识,目前 GCC/VC6/2012 过不了,2015/2017 过的去,有啥科学的说法吗?
vingz
2017-07-03 19:09:42 +08:00
函数声明问题参考十六楼
coderluan
2017-07-03 19:22:11 +08:00
@vingc723 本来我以为是这个问题,但是目前有的编译器居然没问题。31 楼 41 楼
vingz
2017-07-03 19:24:09 +08:00
@coderluan 难道是 ansi c 和 GNU c 的区别吗?
wevsty
2017-07-03 19:30:32 +08:00
int main(){return 0;}
这样的写法才是标准的,不带 int 的写法,不管能不能过编译都不应该提倡。
函数声明写函数体里面这种做法我查了一下,似乎是取决于编译器的实现,没有明确规定不可以这样做。
顺便提一句,VS 目前对于 ANSI C 的支持并不是很标准,在 VS2015 里面,即使 fun 函数放到 main 后面并且不写声明也是可以编译过去的。
coderluan
2017-07-03 19:31:45 +08:00
@vingc723 不知道,目前只有实验结果,没啥资料根据,目前我只能理解成不同编译器的不同行为了,原因就不知道了,毕竟大家一般不会这么写代码的。
hitmanx
2017-07-03 19:38:47 +08:00
@coderluan

我现在才注意到这个问题.原文里 f(int)肯定是不对的,退化完了是指针,不是数值类型.如果函数声明改成 int *,放里面还是放外面是没有区别的.
coderluan
2017-07-03 20:04:10 +08:00
@hitmanx 你一说我也才注意 gcc 报错是这里,不过按照#25#31 的说法,VC 上是能过的,可是又不是所有的 VC 都能过#22,目前我只能理解为理解成不同编译器的不同行为了
hjc4869
2017-07-03 23:38:50 +08:00
@coderluan 我怀疑你在骗我.webp

MSVC 自古以来就支持这么写
coderluan
2017-07-03 23:42:45 +08:00
@hjc4869 我只有 2015 没问题,最开始告诉我这事的朋友是 2012,还有 22 楼的 VC6,他们说编译不过的,从个人情感上来说,我其实偏向于都能跑通,否则也太奇怪了。
hjc4869
2017-07-03 23:47:12 +08:00
@coderluan VC6 跑不通的是放到 .cpp 里了吧? .cpp 跟 .c 不一样,这个语法在 MS C++ 里是不正确的,但是 MS C 没有问题
hjc4869
2017-07-03 23:48:24 +08:00
@coderluan 22 楼 VC6 确实是 C++的输出,不是 C
coderluan
2017-07-03 23:59:59 +08:00
@hjc4869 有可能,cpp 会调用 C++编译器,估计我朋友一个问题,这样我就顺畅很多了
hsmocc
2017-07-04 07:27:22 +08:00
除了 int fun(int *);
lz 大惊小怪确实是因为年纪轻,至少是 90 后吧。
zhanglintc
2017-07-04 07:59:22 +08:00
难道没人提到,双字节的双引号,编译会失败么?[doge]
sgissb1
2017-07-04 09:28:00 +08:00
当年的谭浩强 C 语言就是这样的写法,写法还确实一毛一样。

对于 main 函数,啥时候用 void main,啥时候用 int main,当年的谭大师也没有说。我出来找工作的时候很多笔试题也这样,不过也有部分坑爹的会问,我就不知道了。

记得嵌入式里面用 void main 会多一些,尤其是汇编到 c 的入口位置。具体忘记为啥了。
int main 是后来规范后的写法,在 vc 上 void main 可以编,但是 vs 2010 之后就不晓得了。。。。。
coderluan
2017-07-04 09:52:22 +08:00
@hsmocc #54 确实年纪小,没见过这种写法,但发这个贴也不是大惊小怪,就是想吐槽下专科老师,他确实没考虑楼上讨论的各种问题,不过这楼已经彻底的歪了。歪的挺好,我也学到了些奇怪的姿势,但是希望将来用不到他们。
gnaggnoyil
2017-07-05 02:37:22 +08:00
@sgissb1 从 C89 开始 C 语言标准就从来没保证实现一定支持返回 void 的 main 函数.从 C99 开始标准保证实现一定支持 int main(void)和 int main(int, char **)两种声明.

顺便说下 main 的返回值不是 int 这种情况在 C++中从 C++98 开始就没合法过.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/372721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX