浅谈未定义行为(Undefined behavior)

本文探讨了计算机编程中的未定义行为,特别是在C语言中的表现。未定义行为意味着代码执行结果不可预测,允许编译器有一定的灵活性。文章通过实例解释了这种行为,包括除以零、某些指针操作和缺少返回语句的情况。
摘要由CSDN通过智能技术生成

一、维基百科:


参考:http://zh.wikipedia.org/wiki/%E6%9C%AA%E5%AE%9A%E4%B9%89%E8%A1%8C%E4%B8%BA


在计算机编程中,未定义行为(英语:Undefined behavior)是指行为不可预测的计算机代码。这是一些编程语言的一个特点,最有名的是在C语言中。[1]在这些语言中,为了简化标准,并给予实现(根据我的理解,这里的“实现”指的是编译器)一定的灵活性,标准特别地规定某些操作的结果是未定义的,这意味着程序员不能预测会发生什么事。


二、实例

请看我在csdn的php发过的一个帖子:http://bbs.csdn.net/topics/390620212?page=1#post-395840234

1.php代码:

<?php 
$a = 1;
$c = $a+$a++;
var_dump($c); // result:3

$a = 1;
$c = $a+$a+$a++;
var_dump($c); //result:3

我的理解:第一个结果应该是2,第二个结果应该是3
打印输出:

int 3
int 3

2.c代码:(这段代码我运行在 codepad上:  http://codepad.org/J6leZd7a

#include<stdio.h>
int main() {
    int a = 1;
    printf("a=%d\n",a+a++);
    a = 1;
    printf("a=%d\n",a+a+a++);
    return 0;
}

输出:

a=2
a=3

但是,PHP版的版主回复我:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值