c语言定义变量的执行顺序,C中调用函数之前的参数求值顺序

博客讨论了C语言中函数参数计算顺序的非指定性,指出这种不确定性可能导致未定义行为。文章通过示例代码展示,在没有序列点的情况下多次修改同一变量`pa`,并警告读者编译器可能会发出关于未定义行为的警告。强调开启编译器警告以避免此类问题。
摘要由CSDN通过智能技术生成

c8cd64f6466d544a0f763fec6ea16e6c.png

慕虎7371278

函数参数的计算顺序未指定,参见C99§6.5.2.2p10:函数指示符、实际参数中的实际参数和子表达式的计算顺序未指定,但在实际调用之前有一个序列点。C89中也有类似的措辞。此外,您正在修改pa多次没有调用未定义行为的序列点(逗号运算符引入序列点,但分隔函数参数的逗号不引入)。如果您打开编译器上的警告,它应该警告您:$ gcc -Wall -W -ansi -pedantic test.c -o test

test.c: In function ‘main’:test.c:9: warning: operation on ‘pa’ may be undefined

test.c:9: warning: operation on ‘pa’ may be undefined

test.c:13: warning: operation on ‘pa’ may be undefined

test.c:13: warning: operation on ‘pa’ may be undefined

test.c:17: warning: operation on ‘pa’ may be undefined

test.c:17: warning: operation on ‘pa’ may be undefined

test.c:20: warning: control reaches end of non-void function

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值