精华内容
下载资源
问答
  • 未定义行为

    千次阅读 2015-04-26 21:19:24
    [1]在这些语言中,为了简化标准,并给予实现一定的灵活性,标准特别地规定某些操作的结果是未定义的,这意味着程序员不能预测会发生什么事。 例如,在C语言中,在任何自动对象被初始化之前,通过非字符类型的左值...

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

    例如,在C语言中,在任何自动对象初始化之前,通过非字符类型的左值表达式读取这个变量存储的值会产生未定义行为,除以零或访问数组定义的界限之外的元素(参见缓冲区溢出)也会产生未定义行为。在一般情况下,之后的任何行为是不确定的;甚至只要程序的执行存在未定义行为,在引起未定义行为操作发生之前也可能不要求保证程序的行为可预测(如ISO C++)[2]。特别地,标准从来没有要求编译器判断未定义行为,因此,如果程序调用未定义行为,可能会成功编译,甚至一开始运行时没有错误,只会在另一个系统上,甚至是在另一个日期运行失败。当一个未定义行为的实例发生时,正如语言标准所说,“什么事情都可能发生”,也许什么都没有发生。

    和未指定行为(unspecified behavior)不同,未定义行为强调基于不可移植或错误的程序构造,或使用错误的数据。一个符合标准的实现可以在假定未定义行为永远不发生(除了显式使用不严格遵守标准的扩展)的基础上进行优化,可能导致原本存在未定义行为(例如有符号数溢出)的程序经过优化后显示出更加明显的错误(例如死循环)。因此,这种未定义行为一般应被视为bug。

    C和C++的未定义行为的一些例子[编辑]

    尝试修改字符串字面量会产生未定义行为:[3]

    char * p = "wikipedia"; // C++11中错误,C++98/C++03不推荐使用
    p[0] = 'W'; // 未定义行为
    

    防止这一点的方法之一是将它定义为数组而不是指针

    char p[] = "wikipedia"; /* 正确 */
    p[0] = 'W';
    

    在C++可以使用标准模板库中的string类型,如下所示:

    std::string s = "wikipedia"; /* 正确 */
    s[0] = 'W';
    

    除以零会导致未定义行为。根据 IEEE 754,float、double和long double类型的值除以零的结果是无穷大或NaN[4]

    return x/0; // 未定义行为
    

    某些指针操作可能导致未定义行为:[5]

    int arr[4] = {0, 1, 2, 3};
    int* p = arr + 5;  // 未定义行为
    

    到达返回数值的函数(除main函数以外)的结尾,而没有一个return语句,会导致未定义行为:

    int f()
    {
    }  /* 未定义行为 */
    

    C程序设计语言》在第2.12节引用下面的代码作为未定义行为的例子:

    printf("%d %d\n", ++n, power(2, n));    /* 未定义行为 */
    

    以及

    a[i] = i++; /* 未定义行为 */
    

    标准库可能指定未定义行为,例如:

    int x = 1;
    printf("%d\n", &x);    /*未定义行为:%d预期int类型的实际参数*/
    printf("%p\n", &x);    /*未定义行为:%p预期void*类型的实际参数*/
    printf("%p\n", (void*)&x); /*%p和void*类型的实际参数匹配,不在此引发未定义行为*/
    展开全文
  • 有关C/C++未定义行为

    2018-01-10 16:25:40
    未定义行为(undefined behavior)在计算机程序设计中,未定义行为(英语:undefined behavior)是指行为不可预测计算机代码。

    未定义行为(undefined behavior)

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

    如下段代码:

    printf("%d %d %d %d\n", i++, ++i, ++i++, power(2, i));

    包含多个不确定的副作用的代码的行为总是被认为未定义。(简单而言, “多
    个不确定副作用” 是指在同一个表达式中使用导致同一对象修改两次或修改以后
    又被引用的自增, 自减和赋值操作符的任何组合。这是一个粗略的定义)

    如:

    a[i] = i++;

    属于未定义行为

    i = i + 1;

    却是合法行为

    是因为这个是求值顺序的问题,a[i] = i++ 需要获得i的值来计算地址,需要计算i++来获得需要的值。 这两个求值顺序不同显然结果就不同,但C并无规定求值顺序,因此是未定义的。i = i+1 中,i的地址是固定的,无论i的值怎么变都不会对它产生影响,因此只需要求一次值,也就没有顺序的问题。

    标准规定两个序点之间如果对某数据对象有读写两种操作,那么读必须是为了写。i = i + 1中=右边的读是为了写=左边i的值,因此合法。a[i] = i++中读i的值(两处)并不是为了写i的值,因此是无定义行为。

    C语言中为什么 a[i] = i ++ 属于未定义行为?

    展开全文
  • 浅谈未定义行为(Undefined behavior)

    千次阅读 2013-10-21 12:31:38
    [1]在这些语言中,为了简化标准,并给予实现(根据我的理解,这里的“实现”指的是编译器)一定的灵活性,标准特别地规定某些操作的结果是未定义的,这意味着程序员不能预测会发生什么事。 二、实例 请看我在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版的版主回复我:



    结果竟然也是 

    a=3
    a=3

    原因:

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


    恩,就是这么回事了。。。


    三、其他一些未定义行为的例子:

    除以零会导致未定义的行为。根据 IEEE 754,float,double,和long double类型的值除以零的结果是无穷大或NaN[3]

    return x/0; // 未定义的行为
    

    某些指针操作可能导致未定义的行为:[4]

    int arr[4] = {0, 1, 2, 3};
    int* p = arr + 5;  // 未定义的行为
    

    到达返回数值的函数(除main函数以外)的结尾,而没有一个return语句,会导致未定义的行为:

    int f()
    {
    }  /* 未定义的行为 */
    

    C程序设计语言》在第2.12节引用下面的代码作为未定义行为的例子:

    printf("%d %d\n", ++n, power(2, n));    /* 错误 */
    

    以及

    a[i] = i++;
    


    展开全文
  • 所有符号,都是英语的。比如括号、引号、分号。 注释 程序中添加注释可便于理解、解释程序作用,增强代码可读性,注释内容程序不会运行。 变量声明语法格式: var 变量名 = 变量值 声明变量是使用...

    语法规则

    1. JavaScript对换行、缩进、空格不敏感。
    2. 每一条语句末尾要加上分号,虽然分号不是必须加的,但是为了程序今后要压缩,如果不加分号,压缩之 后将不能运行了。
    3. 所有的符号,都是英语的。比如括号、引号、分号。

    注释

    程序中添加注释可便于理解、解释程序的作用,增强代码的可读性,注释内容程序不会运行。

    变量的声明语法格式

    var 变量名 = 变量值

    声明变量是使用系统关键字 var 来进行的,变量可以单独声明也可以同时声明多个,在声明时也可以给变量初始化(变量符值)

    举例:

    var name;         //声明一个变量
    var name, sex, age;  //同时声明多个变量,多个变量间用英文下的逗号隔开
    var name = "小强";   //一边声明一边赋值
    

    变量的命名规则

    1. 由英文字母(A-Z 和 a-z)、数字(0-9)、下划线(_)、美元符号( $ )组成

    2. 变量名不能以数字开头,可以以字母、下划线或 $ 开头

      例如:var _name, $age;(正确的) var 3abc;(错误的)

    3. 变量名不能是系统关键字。

      例如:var、switch、for、case、else、while 等。

    4. JS中的变量名是区分大小写的。

      例如:name和Name是两个变量

    5. JS中变量的名称一定要有意义。

      例如:代表年龄的变量用 age,姓名使用 userName

    6. 当变量命名由多个单词构成时的两种命名方式

      • 驼峰式命名:

        第一个单词全小写,后面的每一个单词首字母大写。

        例如:

        var  UserName = "钢蛋"
        
      • 下划线式命名:

        所有单词全小写,中间用下划线连接

        例如:

        var  get_user_name = "铁柱"
        

    变量的数据类型

    变量是有数据类型的,JavaScript 是一种弱类型或者说动态语言,这就代表不用提前声明变量的类型,在代码运行时,变量的数据类型是由 JS引擎 根据 变量 = (等号)右边的变量值的数据类型来判断的。同时也意味着相同的变量可用作不同的类型这个类型来源于"变量的值"

    换句话说:值是什么类型的,变量就是什么类型的。

    • JS中变量的类型有:

      数值型(number)、字符型(string)、布尔型(boolean)、undefined(未定义)、null(空)、array(数组)、object(对象)、function(函数)

    变量的数据类型,分两大类

    基本数据类型:

    数值型、字符型、布尔型、未定义型、空型。很显著的特点:一个变量名只能存一个值。

    var a = 10;
    var b = 'string';
    var c = false;
    var d = undefined;
    var e = null;
    

    复合数据类型

    数组、对象、函数,显著的特点:一个变量名,可能存多个值。

    var arr = [10,20,30,40];//数组
    var today = new Date();//对象
    //函数
    function myFunction(){
    	console.log('函数');
    }
    

    数值型:能进行数学运算的变量

    数值型包括:整型、浮点型、NaN(表示不是一个数值)。

    var a = 999;// 整型
    var b = 0.9;// 浮点型
    var c = NaN;// NaN
    

    数值型中一个很特殊的值 NaN,NaN(not a number) 不是一个数字;当将其它数据类型,转成数值型,转不过去,但程序又不能报错,这时将返回一个 NaN 的值;NaN 本身是一个 Number 数值型的变量。

    字符型

    用单引号或双引号,引起来的一个字串。

    var a = "我是一个字符串";
    var b = '我也是一个字符串';
    var c = "";	
    

    注意:

    • 单引号和双引号之间可以相互嵌套;
    • 单引号内只能嵌套双引号;
    • 双引号内只能嵌套单引号。

    布尔型

    布尔型又称逻辑型。只有两个值:true(真)、false(假)。

    布尔型只有两个状态。如:性别、婚否、灯的开关等。

    布尔型常用if条件判断语句中

    var a = true;
    var b = false;
    

    未定义型 undefined

    当一个变量定义,但未赋值时,将返回未定义型,未定义型的值只有一个undefined

    当一个对象的属性不存在,也返回未定义型。

    var a;//定义了变量但未赋值
    console.log(a) // undefined
    
    // 定义了一个对象
    var obj = {
    	uname: '品如',
    	info: '你好骚啊!',
    	age: 20
    }
    var test = obj.gender
    console.log(test) // undefined
    

    空型 null

    当一个对象不存在时,将返回空型,空型的值只有一个null。

    也可以理解为:是一个对象的占位符。

    如果想清除一个变量的值的话,可以给赋一个null的值。

    var a = 100;
    var a = null ;  //将一个null赋给一个变量,用于清除它的值
    
    展开全文
  • php基本英语

    2015-03-03 22:58:55
    Hypertext preprocessor 超文本预处理语言Define 定义 Undefined 未定义的Constant 常量Variable 变量 Global 全球的、总体的static 静态、静止的server 服务器value 值、数值request 请求type 类型string ...
  • undefined 未定义的 under-phase shift 下相位位移 undercurrent release 久流释放 underdamped 阻尼不足 underfill 底部填充 underground cable 地下电缆 underlap 图像缩窄 underruns 减少节目播出时间;欠...
  • 编程英语:常见代码错误 error 语句学习(3) error 1: File not found 文件未找到 ...error 5: Undefined type in pointer def 指针定义中未定义类型 def 是 define 缩写 历史: 编程英语:常见
  • 编程英语:常见代码错误 error 语句学习(1) error 1: Out of memory 内存溢出 ...error 3: Unknown identifier 未定义的标识符 error 4: Duplicate identifier 重复定义的标识符 error 5: Synta
  • 编程英语:常见代码错误 error 语句学习(2) error 1: Unexpected end of file ...error 3: Type identifier expected 未定义的类型标识符 error 4: Too many open files 打开文件太多 error 5: Invalid
  • undefined [,ʌndi'faind] 未定义的,不明确的 global ['ɡləubəl] 全局的, 总体的 Generate [ dʒnəreit] 生成 Modified [ 'mɔdi faid] 修改的,改进的,改良的 29.1. 演讲内容: 1,什么是内部类?Static ...
  • T.  true 真 title 标题 type 类型 temp(=temporary)暂时 throw 扔 thread 线程 ...U....undefined 未定义 UI(User Interface) 用户接口 update 更新 URL(Uniform Resource Locator...
  • 15_09-08 英语单词学习

    2015-09-08 21:35:58
    1.arguments 参数 2.map 映射 3.preferences 参数选择,选择权 4.param 参数 ;...5.resource 资源(图片,字符串,声音...6. undefined 不明确, 未定义的 7. hint 暗示,提示 8.text 文本 9.type类型 10.applic
  • 一个镜像包含2个版本——home、pro 版本号:19042.985 iso大小:4.66 GB 体系结构:64位 映像详细信息: h:\sources\install.wim ...未定义> 版本 : 10.0.19042 ServicePack 内部版本号 : 985 ServicePack..
  • vue-slim-cropper英语| 简体中文:chestnut:示例演示演示源代码:rocket:快速入门安装yarn add vue-slim-cropper#OR ...:electric_plug:API道具名称描述类型默认src图像URL字符串未定义的宽高比纵横比宽度/高度比数量1
  • 如在英语中“Cat dog boy”是不满足语法句子,因为英语语法中未定义形为“<Noun><noun>”句子。又例如,Python表达式“3.2+3.2”是语法正确,但是“3.2 3.2”不是语法正确。 语义表示满足语法程序...
  • 这是一个将翻译成英语的项目。 所需php版本 php5.5或更高版本,php7.x或php8.0。 我对此非常感激 关于数字墨水功能(Windows墨水) 如果在打开数字墨水(Windows墨水)情况下运行Paint BBS NEO / Shi-...
  • vue-image-painter英语| 简体中文:chestnut:示例演示演示源代码:rocket:快速入门安装yarn add vue-image-painter#OR npm i -S vue-image-painter Imp vue-painter英文| 简体中文:chestnut:示例演示演示源代码:...
  • 题目是:定义Student类和Score类,输出一个学生成绩单(包括学号、姓名、高数、英语、政治、C++成绩)要求使用Student成员函数作为友元函数 我是这样写(用是VS2013): **Student.h** ``` #pragma ...
  • TCExam是一款基于网络的开源在线考试系统,用于在线试题的生成、管理等方面。支持多国语言,包括加泰罗尼亚、英语、法语、德语、希腊语...- 修复未定义的K_USRREG_PASSWORD_RE问题;- 修复tce_db_dal.php中的致命错误。
  • 如果你在[Components]section中定义了组件但未定义Types,则在编译过程中会创建一组默认Types。如果您使用默认(英语)消息文件,则这些类型与以下示例中类型相同。这是[Types]部分示例: [Types] Name: "full...
  • 汇编器(Assembler)是将汇编语言翻译为机器语言的程序。一般而言,汇编生成的是目标代码,需要经链接器(Linker)生成可执行代码才可以执行。...简单的讲,链接器的工作就是解析未定义的符号引用,将目标文件中的占位
  • GeoSMS发布 Geo SMS发布版本,已上传到Google Play商店 GeoSMS是一个SMS应用程序,允许格鲁吉亚用户通过Magtifun发送免费的SMS... 如果您发现一些错误或未定义的行为,请通过以下方式报告: 我们将提供许多有用的选项。
  • 红皮书实例总结

    2020-08-18 21:06:44
    在学英语的百忙之中,一天抽出两个时间学计算机。在这八天内,运用了番茄时间管理法则充分利用了时间,完成了红皮书前五个例子。在此之中也遇到了一些困难,下面跟大家分享一下我遇到问题。  在实例一中就遇到了...
  • 由于我的英语还不够好,为保证准确描述问题,这里我直接使用中文。我使用了您的CodeBase,在试图使用Cider多样性指标时,出现了<code>cider.my_self_cider未定义的错误,具体输出如下...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

未定义的英语