Redian新闻
>
C编译器为何允许一个函数在某个路径不返回值?
avatar
C编译器为何允许一个函数在某个路径不返回值?# Programming - 葵花宝典
f*r
1
一家的医疗保险如何解决?
avatar
s*t
2
i have an EB1-b I140 pending since Feb 2011 ... and now my EB2 got approved.
Do I need to withdraw my EB1-b case (I will have two A#) and how to?
Thanks.
avatar
l*o
3
ooops
avatar
d*i
4
至少vc对以下的烂函数很宽容,只是个编译期warning - "not all control paths
return a value"
int yy=0;
int test_func()
{
if(yy>0)
return 1;
}
而且奇怪的是它能正常运行,无疾而终。
int dd=test_func();
接受返回值的dd还是默认值,没受影响。
不理解啊。
求指点。谢谢!
avatar
ET
5
obama care

【在 f*********r 的大作中提到】
: 一家的医疗保险如何解决?
avatar
s*1
6
恭喜!

approved.

【在 s********t 的大作中提到】
: i have an EB1-b I140 pending since Feb 2011 ... and now my EB2 got approved.
: Do I need to withdraw my EB1-b case (I will have two A#) and how to?
: Thanks.

avatar
d*p
7
Cool news - a sign of Mac's increased adoption by engineering customers :-)
avatar
S*I
8
本来就是允许的;至于你的代码,那个函数调用既然没有影响,编译器可能直接把它优
化掉了。

【在 d******i 的大作中提到】
: 至少vc对以下的烂函数很宽容,只是个编译期warning - "not all control paths
: return a value"
: int yy=0;
: int test_func()
: {
: if(yy>0)
: return 1;
: }
: 而且奇怪的是它能正常运行,无疾而终。
: int dd=test_func();

avatar
c*4
9
gxgx
avatar
l*a
10
厉害阿, 这下solidworks有的受了

【在 d****p 的大作中提到】
: Cool news - a sign of Mac's increased adoption by engineering customers :-)
avatar
d*e
11
现在的孩子不学习汇编和编译,所以很难理解。
这有什么不可以的。

【在 d******i 的大作中提到】
: 至少vc对以下的烂函数很宽容,只是个编译期warning - "not all control paths
: return a value"
: int yy=0;
: int test_func()
: {
: if(yy>0)
: return 1;
: }
: 而且奇怪的是它能正常运行,无疾而终。
: int dd=test_func();

avatar
a*a
12
re
avatar
l*o
13
这下果黑又少了一个G点。

【在 l******a 的大作中提到】
: 厉害阿, 这下solidworks有的受了
avatar
d*n
14
编译器接受了某个代码并不代表代码是正确的。
首先看看test_func()在C的abstract machine上是如何运行的,if(yy>0)是false,
所以程序会执行到 "}", 然后标准规定(n1570 6.9.1):
If the } that terminates a function is reached, and the value of the
function call is used by
the caller, the behavior is undefined.
int dd = test_func()这条语句正好符合上边的描述,所以你的代码
里存在未定义行为,C标准允许编译器做任意的事情。

【在 d******i 的大作中提到】
: 至少vc对以下的烂函数很宽容,只是个编译期warning - "not all control paths
: return a value"
: int yy=0;
: int test_func()
: {
: if(yy>0)
: return 1;
: }
: 而且奇怪的是它能正常运行,无疾而终。
: int dd=test_func();

avatar
z*o
15
GXGX!!!
baozi pls
avatar
Y*G
16
x86上return xxx就是将xxx放到寄存器EAX。调用者看EAX来获得函数的返回值。
如果没有return语句等于执行隐含的return语句,返回值无定义,是垃圾。
avatar
l*l
17
cong!

approved.

【在 s********t 的大作中提到】
: i have an EB1-b I140 pending since Feb 2011 ... and now my EB2 got approved.
: Do I need to withdraw my EB1-b case (I will have two A#) and how to?
: Thanks.

avatar
d*n
18
这个未必,因为函数是可以被内联的。
当然,因为他的代码本身是错误的,包含未定义行为,所以编译器可以做任意
的事情。。。

【在 Y**G 的大作中提到】
: x86上return xxx就是将xxx放到寄存器EAX。调用者看EAX来获得函数的返回值。
: 如果没有return语句等于执行隐含的return语句,返回值无定义,是垃圾。

avatar
P*e
19
re

approved.

【在 s********t 的大作中提到】
: i have an EB1-b I140 pending since Feb 2011 ... and now my EB2 got approved.
: Do I need to withdraw my EB1-b case (I will have two A#) and how to?
: Thanks.

avatar
b*s
20
除了内联,还有返回值优化

【在 d****n 的大作中提到】
: 这个未必,因为函数是可以被内联的。
: 当然,因为他的代码本身是错误的,包含未定义行为,所以编译器可以做任意
: 的事情。。。

avatar
f*n
21
gxgx!!!
do u have lawyer? u can get ans from him. my personal take is yes.
avatar
d*n
22
返回值优化(RVO)通常指带的是在C++编译器里的一种优化吧?在C编译器里好像没有类
似的优化.

【在 b*******s 的大作中提到】
: 除了内联,还有返回值优化
avatar
t*y
23
GXGX!!!
baozi pls
avatar
Y*G
24
看仔细了,他的函数前面没有inline,别乱扯。

【在 d****n 的大作中提到】
: 这个未必,因为函数是可以被内联的。
: 当然,因为他的代码本身是错误的,包含未定义行为,所以编译器可以做任意
: 的事情。。。

avatar
d*8
25
祝贺你。
avatar
d*n
26
...函数前不加inline,并不代表编译器不会inline这个函数,
类似,函数前加了inline, 并不代表编译器一定会inline这个函数,
inline只是一个hint, 不是“必须”。

【在 Y**G 的大作中提到】
: 看仔细了,他的函数前面没有inline,别乱扯。
avatar
s*a
27
cong

approved.

【在 s********t 的大作中提到】
: i have an EB1-b I140 pending since Feb 2011 ... and now my EB2 got approved.
: Do I need to withdraw my EB1-b case (I will have two A#) and how to?
: Thanks.

avatar
Y*G
28
你怎么就知道他没用noinline选项哪。说不定他用了。

【在 Y**G 的大作中提到】
: 看仔细了,他的函数前面没有inline,别乱扯。
avatar
m*u
29
GX.

approved.

【在 s********t 的大作中提到】
: i have an EB1-b I140 pending since Feb 2011 ... and now my EB2 got approved.
: Do I need to withdraw my EB1-b case (I will have two A#) and how to?
: Thanks.

avatar
d*n
30
这就扯的远了,我并没有说你之前说错了,只是说未必编译器会
做你说描述的情况,也许会,也许不会。。。

【在 Y**G 的大作中提到】
: 你怎么就知道他没用noinline选项哪。说不定他用了。
avatar
x*e
31
gongxi!我觉得你应该withdraw你的EB1。
avatar
b*s
32
嗯,cpp才有

【在 d****n 的大作中提到】
: 返回值优化(RVO)通常指带的是在C++编译器里的一种优化吧?在C编译器里好像没有类
: 似的优化.

avatar
L*a
33
cong
rebaozi
avatar
w*n
34
cong!

approved.

【在 s********t 的大作中提到】
: i have an EB1-b I140 pending since Feb 2011 ... and now my EB2 got approved.
: Do I need to withdraw my EB1-b case (I will have two A#) and how to?
: Thanks.

avatar
h*8
35
恭喜恭喜
avatar
e*m
36
恭喜,包子·
avatar
u*9
37
gxgx
no need

approved.

【在 s********t 的大作中提到】
: i have an EB1-b I140 pending since Feb 2011 ... and now my EB2 got approved.
: Do I need to withdraw my EB1-b case (I will have two A#) and how to?
: Thanks.

avatar
c*y
38
gxgx!
avatar
G*e
39
congrats
avatar
m*s
40
cong!

approved.

【在 s********t 的大作中提到】
: i have an EB1-b I140 pending since Feb 2011 ... and now my EB2 got approved.
: Do I need to withdraw my EB1-b case (I will have two A#) and how to?
: Thanks.

avatar
w*e
41
gxgx
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。