undefined-behavior相关内容

其中积分促销打印一个char什么时候发生?

最近,我读了 unsigned char型X = 1; 的printf(“%U”,X); 调用不确定的行为,因为由于格式说明%U,预计的printf一个unsigned int。但我仍想了解什么是在这个例子中事。 我认为,整体推进的规则适用于除权pression 的printf(“%U”,X) 和 X psented转口货值为$ P $。 A.6.1积分促销 一个字 ..
发布时间:2016-08-22 16:42:37 C/C++

任何C编译器在哪里QUOT&; =="计算结果为大于一?

作为任何非零意味着真实的,但> ,< , == 等运营商返回 1 真正的,我很好奇,如果有任何显着的C编译器,而这些运营商可以导致价值大于 1 。 在换句话说,有没有编译其中int I =(A == B);会导致不确定的行为,如果我打算用 I 不是一个布尔值,但作为一个整数,并假设它是不是 0 或 1 ? 解决方案 没有,如果有,他们不是C编译器的:-)关系和相等运算符返回1 ..
发布时间:2016-08-22 16:41:24 C/C++

什么是替代品可供前身 - 广泛支持的行为不是由C标准定义

在C之前标准化初期,实现了多种处理各种行动的特殊和半特殊情况下的方式。他们中的一些会触发陷阱,如果不先配置可能导致随机code执行。因为这种陷阱的行为是C标准的范围之内(可能在某些情况下,由操作系统正在运行的程序的控制范围之外进行控制),并避免要求编译器不会允许code这一直依赖于这样的陷阱,继续这样做,那可能会导致这些陷阱动作行为完全取决于编译器/平台的自由裁量权。 到了90年代末,虽然由C标 ..
发布时间:2016-08-22 16:38:30 C/C++

如何一个等于前pression工作printf的占位符?

我有以下的code片断: 的main() { INT K = 35; 的printf(“\\ n%D%D”,K = = 35,K = 50,K> 40); } 产生以下输出 0 50 0 我不知道我理解的的printf的的第一个值怎么来 0 。当 k值与 35 ,它应该理想地返回(从而打印)1,但如何比较它打印零?另外两个值是已交出 50 和 0 都是正确的,因为在第二个值,值k设 ..
发布时间:2016-08-22 15:52:15 C/C++

C固定inline函数重新定义规则

假设在 bar.h 有可能的存在: 静态内联INT乐趣(){返回2; } 和确保乐趣始终定义 foo.h中包含以下内容:静态内联INT乐趣(){返回3; } 执行以下操作引起未定义行为时 bar.h 包含定义?的#include“foo.h中”/ *确保始终有一个定义* / #包括“bar.h”/ *使用栏定义如果存在* /诠释主(){ / * ... * / INT X = ..
发布时间:2016-08-22 15:27:18 C/C++

关于用C短数据类型格式说明混乱

考虑下面的程序: 的#include<&stdio.h中GT; 诠释的main() { 短= 9; //的printf(“%喜\\ N”,一); 的printf(“%d个”,一); // LINE 6 } 根据这的短类型的格式说明符(签字)为 %喜 在短类型的变量总是被自动提升为 INT上执行任何操作之前,?它是不确定的行为, 如果我使用%D格式说明打印在这个 ..
发布时间:2016-08-22 14:52:29 C/C++

用C隐宣言

执行以下程序调用未定义行为用C? INT的main() { 的printf(“printf的问:我的声明?”); } 在上面的程序有的printf的一个隐含的声明(),所以上面的code完全符合标准,或者只是有一些实施的具体行为? 解决方案 是它。由于没有在一个范围内声明UB。 J.2未定义行为 - 对于调用函数时没有 函数原型范围在哪里 ..
发布时间:2016-08-22 14:42:01 C/C++

请问C标准强制要求的平台不能定义超出标准给出的行为

C标准明确指出,一个编译器/库组合是允许做任何它具有以下code喜欢: INT doubleFree(字符* P) { INT TEMP = * P; 自由(对); 自由(对); 返回温度; } 在一个编译器并不需要使用特定的捆绑库的事件,但是,有没有在C标准的任何事从定义一个有意义的行为,禁止出库? ;作为一个简单的例子,假设code是为一个平台,有引用计数指针,这样下面 ..
发布时间:2016-08-21 22:35:34 C/C++

如何识别未定义行为

有没有什么办法++知道你是否程序有不确定的用C行为(甚至C),短期记忆整个规范的? 我想问的原因是,我注意到很多程序案件调试工作但没有释放是由于未定义行为。这将是很好,如果有一个工具,至少可以帮助现货UB,所以我们知道有潜在的问题。 解决方案 良好的编码标准。从自己保护你。这里有一些想法: 在code的必须的编译在最高级别的警告... 无警告。 (换句话说,不能衬托你的code的任 ..
发布时间:2016-08-21 22:15:03 C/C++开发

是'Y = X = X + 1;`不确定的行为?

正如标题所说,是 Y = X = X + 1; 用C未定义的行为? 解决方案 回答您的问题结果 没有。 会发生什么事结果 会出现这种情况: INT X = 1; / *假设这是SO * / Y = X = X + 1;/ *结果:* / Ÿ== 2; 点¯x== 2; 如何编译结果 一样的: X + = 1; Y = X; 为什么这不是未定义结果 因为你不写 X 在相同 ..
发布时间:2016-08-21 22:10:12 C/C++

调用C和未定义/未指定的行为函数时顺序点

我想拖住我的序列点的理解用C - 只是想检查一番。在present,我相信,(1)是不确定的,而(2)仅仅是不确定的,在(2),有评估的参数为先按g 和 ^ h (所以我们不会修改 I 序列点之间两次),但秩序的 F的参数评价仍然是不确定的。是我的理解是否正确? 的#include<&stdio.h中GT;INT克(int i)以{ 返回我; }INT H(int i)以{ ..

什么是找到两个值的平均值的正确方法?

我最近才知道,整数溢出是C中的未定义行为(方的问题 - 是它也UB在C ++中) 经常在C语言编程,你需要找到两个值 A 和 B 的平均值。但是这样做(A + B)/ 2 可导致溢出和不确定的行为。 所以我的问题是 - 什么是找到两个值的平均值的正确方法 A 和 B 中C 3 解决方案 与 ..
发布时间:2016-08-21 20:50:26 C/C++

为什么一个程序访问非法指针的指针不会崩溃?

一个程序访问非法指针,指针不随SIGSEGV崩溃。这是不是一件好事,但我想,这可能是和过程如何存活在生产中多日。令人感到迷惑我。 我已经给本程序在Windows,Linux和OpenVMS的,和Mac OS一去,他们从来没有抱怨过。 的#include<&stdio.h中GT; #包括LT&;&string.h中GT;无效printx(无效* REC){//我知道这应该是一个** ..
发布时间:2016-08-21 20:49:34 C/C++

GOTO之前局部变量

执行以下操作code的一块构成不确定的行为,因为我的变量声明前跳,并通过指针使用它吗?如果是这样,是否有标准之间的差异? INT的main(){ 为int * p值= 0; LABEL1: 如果(P){ 的printf(“%d个\\ N”,* P); 返回0; } INT I = 999; P =&放;我; 转到LABEL1; 返回-1; } 解决方案 有在你的程序中 ..
发布时间:2016-08-21 20:48:38 C/C++

臭虫例如快速排序(K&安培; R C书)?

这是快速排序应该排序“V [左] ... v [右]为增加令”;由K&放从C编程语言复制(没有评论),R(第二版): 无效的qsort(INT v [],诠释左,右诠释) { INT I,最后的; 无效掉期(INT v [],INT I,诠释J); 如果(左> =右) 返回; 交换(ⅴ,左,(左+右)/ 2); 最后剩下=; 对 ..
发布时间:2016-08-21 20:27:56 C/C++

做评估括号力秩序,使一个未定义的前pression界定?

我正要虽然我的课本,当我遇到这个问题。来了 下面前pression后会是什么的价值?结果 假设的一个= 5.Mention的步骤的初始值 A + =(A ++)+(++一) 起初我以为这是不确定的行为,因为已修改多次。结果 于是我读了问题,它说的提到的步骤,所以我大概以为这个问题是对的。 所以我的问题是: 申请是否使括号中定义的未定义的行为? 是评价一个括号前pre ..
发布时间:2016-08-21 20:17:59 C/C++开发

无效的指针变得再次有效

INT * P; { INT X = 0; P =&放大器; X; } // p是不再有效 { INT X = 0; 如果(安培; X = = P){ * p值= 2; //这是有效的? } } 访问的指针的东西后,它指向已经释放是不确定的行为,但如果一些后分配在同一地区发生的会发生什么,你明确了老猎狗比较一个指向新的东西?难道也无妨, ..
发布时间:2016-08-21 20:08:42 C/C++

为什么这是一个不确定的行为?

我要回答的这个问题是这样的功能: 内联BOOL divisible15(unsigned int类型X) { // 286331153 =(2 ^ 32 - 1)/ 15 // 4008636143 =(2 ^ 32) - 286331153 返回X * 4008636143< = 286331153; } 这工作完全在我的机器上用VS2008的编译器,但 ..
发布时间:2016-08-21 20:07:59 C/C++开发

在C,如果我投&安培;解引用一个指针,它无关紧要我做的哪一个先?

在C,您可以施放既简单数据类型,如 INT ,浮动,和指向这些。 现在我会假设,如果你想从一个指针转换成一种类型到另一种类型的值(例如,从 *浮动到 INT ),铸造的顺序和提领无所谓。即对于一个变量浮动* PF ,你有(INT)* PF == *((INT *)PF)。有点像数学可交换... 然而,这似乎不是这种情况。我写了一个测试程序: 的#include<&stdio.h中GT; ..
发布时间:2016-08-21 20:00:09 C/C++

难道诠释A = 1,B = A ++;未定义行为?

确实 INT A = 1,B = A ++; 未定义行为?还有就是初始化之间中间没有顺序点 A 及其访问和修改在初始化为 B ,但作为据我所知,初始化是不是对象“修改”;一个初始被指定给对象的“初始值”。每6.7.8初始化,第8段: 这是初始化指定存储在对象的初始值。 和似乎是合理的采取“初始”像以前一样对对象的任何访问被测序。有这个问题之前已经考虑,而且有一个公认的跨pretatio ..
发布时间:2016-08-19 16:15:49 C/C++