undefined-behavior相关内容

为什么的printf("%F",0);给未定义行为?

语句的printf(“%F \\ N”,0.0); 0打印结果 不过,声明的printf(“%F \\ N”,0); 打印随机值。 我知道我表现出某种不确定的行为,但我想不出为什么特别。 一个浮点值,其中所有的位为0仍是一个有效的浮动与0结果值 浮动和 INT 是我的机器上相同大小(如果,甚至是相关的)。 为什么使用文本,而不是原因此行为浮动文字在的printf 点整数? 解决方案 ..
发布时间:2016-08-18 22:04:58 C/C++开发

什么是用于出租的语义的原因= a ++是不确定的?

A = A ++; 在C.不确定的行为,我问的问题是:为什么 我的意思是,我得到它可能很难提供一致的顺序事情应该做的。但是,某些编译器将永远做它在一个顺序或另一个(在给定的优化电平)。那么究竟这是为什么留给编译器来决定? 要清楚,我想知道,如果这是一个设计决策,如果是这样,是什么促使了吗?或者,也许有某种类型的硬件限制? (注意:如果该问题的标题似乎不明确或不够好,然后反馈和/或更改,欢迎 ..
发布时间:2016-08-18 22:03:52 C/C++

为什么这对于在一些平台上,而不是别人循环退出?

我最近开始学习C,我采取了类C作为主题。我目前正在玩弄循环和我遇到一些奇怪的行为,我不知道该怎么解释。 的#include<&stdio.h中GT;诠释的main() { int数组[10],I; 对于(i = 0; I< = 10;我++) { 数组[我] = 0; / * code不应该终止* / 的printf(“测试\\ n”); } 的pri ..
发布时间:2016-08-18 21:52:47 C/C++

用C未初始化的变量

我是一个有点困惑。据我所知,如果你声明用C一个int,没有初始化它,为例如: INT X; 所以它的价值是不确定的。因此,如果我们尝试使用它还是应该有未定义的行为。 所以,如果我运行下面的code在VS2010这程序崩溃。 INT的main(){ int类型的; 的printf(“%d个\\ N”,一); 返回0; } 现在让我们来看看下一个code,它不提供任 ..
发布时间:2016-08-18 15:21:15 C/C++

有没有在EX pression序列分^ = B ^ = a ^ = B,或者是不确定的?

交换两个整型变量,而不是使用临时存储的所谓的“聪明”(但实际上效率低下)的方式,往往涉及这一行: int类型的= 10; INT B = 42;一个^ = B ^ = a ^ = B; /*这里*/输出(“A =%D,B =%d个\\ N”,A,B); 但我想知道,复合赋值操作符,如 ^ = 不是序列点,是吗? 这是否意味着它实际上是不确定的行为? 解决方案 A ^ = B ^ = a ..
发布时间:2016-08-18 15:05:57 C/C++

是在一个空指针未定义行为执行算术?

在我看来像下面的程序计算了无效的指针,因为 NULL 是没有良好的任何东西,但赋值和比较平等: 的#include<&stdlib.h中GT; #包括LT&;&stdio.h中GT;诠释主(){ 字符* C = NULL; C - ; 的printf(“C:%P \\ N”,C); 返回0; } 不过,好像没有针对未定义的行为在GCC或锵警告或仪器仪表的说,这其实是在UB。是 ..
发布时间:2016-08-18 15:05:39 C/C++开发

什么&QUOT *((字符*) - 1)='x'的;" code是什么意思?

我在读书的Redis源$ C ​​$ C的一个问题,谁能告诉我什么是使用在调试 _redisAssert 函数的最后声明.C 的: *((的char *) - 1)='X'; 解决方案 更新 我发现 debug.c 行在OP提到的,我们可以从上面两行此code看到: redisLog(REDIS_WARNING“(强制SIGSEGV打印错误报告)。”); 和同一code可以在 ..
发布时间:2016-08-18 14:58:27 C/C++

在strcpy的分段故障

审议以下程序 的char海峡[5]; 的strcpy(STR“Hello12345678”); 的printf(“%S”,STR); 在运行此程序会产生分段错误。 但是,当strcpy的被替换之后,程序运行正常。的strcpy(STR“Hello1234567”); 所以,问题是应该试图复制为str超过500个字符长度的任何其他字符串时崩溃。 那么,为什么它没有崩溃的“H ..
发布时间:2016-08-18 14:38:07 C/C++开发

是同时(1);用C未定义行为?

在 C ++ 11是未定义行为,但在C了而(1); 是未定义行为? 解决方案 这是明确界定的行为。在C11新的6.8.5条款6广告已添加 这是循环语句的控制前pression不是一个常量前pression, 156)执行没有输入/输出操作,不访问volatile对象,进行不同步在它的身上或原子操作,控制前pression,或(在for语句的情况下),其前pression-3,可以通过 ..
发布时间:2016-08-18 14:15:00 C/C++

功能优化,在无限循环“的gcc -O2”

上下文 我被我的一个朋友提出以下谜: 无效FN(无效) { / *写的东西此评论之后,以使程序的输出为10 * / / *此评论之前写的东西* / }诠释的main() { INT I = 5; FN(); 的printf(“%d个\\ N”,I); 返回0; } 我知道可以有多种解决方案,涉及的一些宏观和一些假设一些有关的执行和违反℃。 一个特别的解决方案,我 ..
发布时间:2016-08-18 14:02:34 C/C++

为什么A =(A + B) - (B = A)用于交换两个整数一个坏的选择?

我一头栽进这个code用于交换两个整数,而无需使用一个临时变量或使用位运算符。 INT的main(){ 诠释一个= 2,B = 3; 输出(“A =%D,B =%d个”,A,B); 一个=(A + B) - (B = A); 的printf(“\\ NA =%D,B =%d个”,A,B); 返回0; } 但我认为这code在交换声明 A =(A + B ..
发布时间:2016-08-18 13:49:10 C/C++开发

用C unsigned int类型的行为负

我不明白为什么一个unsigned int的输出为负以下code。 就像一个符号整数。 uint32_t的YYY = 1<< 31; 的printf(“%d个\\ N”,YYY); 输出是: -2147483648 这是 -2 ^ 31 。 解决方案 格式说明了%d个预计的 INT ,而不是 unsigned int类型,所以code有不确定的行为。从C ..
发布时间:2016-08-18 13:42:53 C/C++

程序没有崩溃缓冲区溢出时

我想读通过键盘和存储在 BUF 的字符串。我设置了字符BUF [6] 阵,此阵最多可存储5个字符和 \\ 0 。 然后我键入 123 456 789 它包含11个字符和一个 \\ 0 ,程序仍然可以运行,但如果我输入一个更长的字符串 123 456 789 123 456 789 它会崩溃在运行时。 这两个输入也出了 BUF 的范围内,但可以运行,其他的崩溃? 下面是我的code: 的#i ..
发布时间:2016-08-18 13:41:49 C/C++

C code。与不确定的结果,编译器会生成无效code(与-O3)

我知道,当你在C程序做某些事情,结果是不确定的。然而,编译器不应该产生的无效的(机)code,对不对?这将是合理的,如果code做了错误的事情,或者code生成的段错误或东西... 难道这根据编译器规范的情况发生,或者是在编译器中的错误? 下面是我使用的(简单)的程序: INT的main(){ 字符* PTR = 0; *(PTR)= 0; } 我与 -O3 编译。这不 ..
发布时间:2016-08-18 13:37:24 C/C++

序列点和评估顺序

我读通过K&安培; R和我在行为上碰到这个例子中的不确定性在评估前pression像 A [i] =我++ ; C99的规格书$ 6.5.2说, 在previous和下一个序列点之间的对象应具有其存储的值由前pression评价修改最多一次。此外,前一个值是只读,以确定该值将被存储 从K&放上面的例子; R持有的第一条语句不错。请解释它是如何失败的第二个。 标准是否说,关于子前pr ..
发布时间:2016-08-18 13:21:54 C/C++