language-lawyer相关内容

scanf的是保证不改变失败的价值?

如果一个 scanf函数家庭功能不匹配当前的说明,它是允许写入到那里将存储在成功的值存储? 在我的系统下面的输出 213 两次,但就是保证? 标准(C99或C11)语言似乎并没有明确规定,原来的值应保持不变(无论是不确定或不)。 的#include<&stdio.h中GT;诠释的main() { INT D = 213; //匹配失败 sscanf的(“富”,“% ..
发布时间:2016-08-19 00:04:29 C/C++

是否有可能写在C一致性实现的malloc?

这是一个后续到能否在字符数组可以与任何数据类型用? 我知道动态内存和malloc的普遍的实现,引用可以在维基被发现。我也知道,由malloc返回的指针可以转换为任何程序员希望,甚至没有一个警告,因为在6.3.2.3指针§1标准状态 要作废的指针可以转换或从一个指向任何不完全或对象 类型。一个指向任何完整或对象类型可被转换成一指向void 并再次返回;结果应比较等于原始指针 问题是 ..
发布时间:2016-08-18 23:54:55 C/C++

它是非法使用h或hh长度修改时,相应的参数的printf不是一个短/字符?

的的printf 系列函数提供一系列长度修改的,其中两个是 HH (表示一个符号字符或晋升为unsigned char型参数 INT )和 ^ h (表示一个符号短或无符号短参数提升为 INT )。从历史上看,这些长度修改只被引入到与 scanf函数的长度修改创建对称,很少用于的printf 下面是ISO的9899摘录时间:2011年§7.21.6.1“fprintf函数”¶7: 7的长度 ..
发布时间:2016-08-18 23:54:15 C/C++

Ç - 是一个不确定的值不确定的?

根据这个帖子一个不确定的值是: 3.17.2 1不确定的值 无论是一个未确定的值或重新presentation陷阱 据谷歌,不确定的定义是: 不特定的,已知的或已建立 左怀疑;含糊。 据thefreedictionary,确定为: 能够被确定 据韦氏,以确定(在特定情况下)是: 要找出或通过调查,推理或计算来决定关于 因此​​,根据常理判断,即使一个不确定的值是在编译时未知,所 ..
发布时间:2016-08-18 23:54:03 C/C++

是否从指针到常量去除const的服从用C严格走样,并参考同一个对象?

请问在C以下code定义的行为? INT的main(){ const int的I = 0; 回*为(int *)(安培; I) } 我问,因为6.5 / 7列表作为一个有效的别名“的有效对象的类型兼容的类型的合格的版本。”但有效对象的类型是 const int的,我不认为 INT 是一个合格的版本 const int的(虽然正好相反)。无论是 INT 和 const int ..
发布时间:2016-08-18 23:50:48 C/C++

什么是"字节"在C / C ++

例如,下面是一个的fread参考: 为size_t FREAD(无效* PTR,为size_t长度size_t计数,FILE *流); 读取数元素的数组,每一个大小为“大小字节”... 那么有多少位将读了 FREAD(安培; X,1,1,流)?八, CHAR_BIT ? 解决方案 C99,第3.6节: 字节 数据存储足以容纳基本字符集执行环境中的任何成员的可寻址 ..
发布时间:2016-08-18 23:48:28 C/C++

理由比较指针数组外面是UB

所以,标准(指 N1570 )称,比较指针如下: C99 6.5.8 / 10关系运算符 当两个指针进行比较,结果取决于相对上 中的对象的地址空间中的位置指向。 ... [喀嚓比较明显的定义,聚集内] ... 在其他情况下, 该行为是不确定的。 什么是UB的这个实例的理由,而不是指定(例如)转化为使用intptr_t 和这种对比? 有一些机器架构,其中三分球上一个明智的 ..
发布时间:2016-08-18 23:36:15 C/C++

是否通过C投访问结构的第一个字段违反被严格走样?

这是否code违反严格走样? 结构{INT X;}一个; *为(int *)及一个= 3 更抽象,它是合法的,不同类型之间,只要原始的读/写操作的类型是否正确?投 解决方案 首先,它是合法的C.投§6.7.2.1/ 13: 在一个结构物中,非位域成员和单位 该位域驻留有,在增加的顺序地址 声明它们。一个指向结构对象,适当 转换后,指出了其最初的成员​​(如该成员是 ..
发布时间:2016-08-18 23:17:54 C/C++开发

什么是&QUOT的定义;运算"在C99?

在C99,术语的算术运算的出现16次,但我没有看到一个定义它。 术语的算术运算符的只有两次在文本(同样没有定义)出现,但它会出现在索引: 算术运算符 添加剂,6.5.6,G.5.2 按位,6.5.10,6.5.11,6.5.12 增量和减量,6.5.2.4,6.5.3.1 乘6.5.5,G.5.1 转变,6.5.7 一元,6.5.3.3 然后我们有 ..
发布时间:2016-08-18 23:17:40 C/C++

为SUM +++我用C不确定的行为?

我测试了不同的机器上,并在不同的编译器,但我给出了相同的输出: INT总和= 10,I = 5; 的printf(“%d个”,总和+++我); 在C这明确或不确定的行为? 解决方案 这是很好的界定。 总和+++我被解析为总和++ + I ,结果为 15 (含递增的副作用之)。 C11 6.4节词汇元素 如果输入流被解析为preprocessing令牌到一个给定的字 ..
发布时间:2016-08-18 23:10:35 C/C++

uint8_t有可能是一个非字符类型?

在这个答案和附加注释的,的帕维尔Minaev 做的是,在C,唯一的类型到 uint8_t有可typedef定义为字符和 unsigned char型。我期待在 C标准的这一草案。 的uint8_t有的presence意味着相应类型的presence中int8_t (7.18。 1P1)。 中int8_t 宽度为8位,没有填充位(7.18.1.1p1)。 通讯类型具有相同的宽度(6.2.5 ..
发布时间:2016-08-18 22:53:31 C/C++

由于C标准委员会没有规范的简单替代得到(),有什么应该是什么?

的获得函数是第一代precated在C99终于在C11中删除。然而,有C库它没有直接更换。 与fgets()不是一个简易替换,因为它不会删除最后一个的'\\ n' ,这可能是在文件的结尾不存在。许多程序员搞错了。 有一个单行除去换行: BUF [strcspn(BUF,“\\ n”)] ='\\ 0'; ,但它是不-trivial并经常要求一个解释。它可能是低效的,以及 这是适得其反。很多初 ..
发布时间:2016-08-18 22:50:47 C/C++

是一个main()需要一个C程序?

嘛标题说明了一切。是一个的main()函数的C程序绝对必要的? 我问这个,因为我一直在寻找在Linux内核code,我没有看到一个main()函数。 解决方案 没有,ISO C标准规定,一个主函数只需要一个托管环境(如为一个与底层OS)。 对于像嵌入式系统独立环境(或操作系统本身),它的定义实现。从C99 5.1.2 : 两个执行环境定义为:独立和主持。在这两种情况下,当一个指定 ..
发布时间:2016-08-18 22:49:21 C/C++

C标准兼容的方式来访问空指针的地址?

在C,deferencing的的空指针的是未定义行为,但空指针值有一点重presentation,在某些架构使得它指向一个有效的地址(如地址0 )。结果 让我们把这个地址的空指针地址的,为了清楚起见。 假设我想用C编写一个软件,在奔放的访问内存的环境。进一步假设我想在空指针的地址写一些数据:我怎么会实现,在一个标准兼容的方式 的例的情况下(IA32E):的 的#include< st ..
发布时间:2016-08-18 22:34:12 C/C++

可在空隙返回函数g返回F();当f返回void?

考虑下面的代码片段: 无效F(无效);虚空克(...) { ... 返回f()的; ... } 这是返回F();根据C11 有效 我不提倡使用这种模式:如果它工作的话,那显然是等同于),F(;返回; (其中返回; 本身是多余的,如果这是在函数结尾克())。我问这个问题在C程序的静态分析,所在的C code已经被别人写的,问题的背景是决定它是否按标准是有效的。 我将除$ P $角C ..
发布时间:2016-08-18 22:33:30 C/C++

是((无效*)0)空指针常量?

我阅读这篇博客并根据部分的空指针常量和括号的前pressions 作者引用第6.3.2.3和ISO C标准6.5.1§说: 它的不的说,一个括号空指针常量是一个空指针常量。 这意味着,严格来说,是(无效*)0 是一个空指针 不变的,但((无效*)0)不是 然后: 我敢肯定,大多数C实现根本治疗括号空指针常数作为空指针常量,并定义 NULL 无论是作为 0 ,((无效*)0 ..
发布时间:2016-08-18 22:15:59 C/C++