问题标签 [c99]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 打印、转换时考虑FPU取整模式的编译平台
编辑:我在调试期间犯了一个错误,导致我问这个问题。我看到的差异实际上在于打印双精度和解析双精度 ( strtod
)。即使经过这次整改,斯蒂芬的回答仍然很好地涵盖了我的问题,所以我想我会不理会这个问题,以防它对某人有用。
我可以访问的一些(大多数)C 编译平台在以下情况下不考虑 FPU 舍入模式
- 将 64 位整数转换为
double
; - 打印一个
double
.
这里没有什么特别的东西:Mac OS X Leopard、各种最新的 Linux 和 BSD 变体、Windows。
另一方面,Mac OS X Snow Leopard 在做这两件事时似乎将舍入模式考虑在内。当然,有不同的行为会让我烦恼不已。
以下是这两种情况的典型片段:
我的问题是:
- 我可以做一些不丑陋的事情来规范所有平台的行为吗?一些隐藏的设置告诉平台不考虑舍入模式,反之亦然?
- 是行为标准之一吗?
- 不使用 FPU 舍入模式时,我可能会遇到什么情况?向零舍入?四舍五入到最近?请告诉我只有一种选择:)
关于 2. 我在标准中找到了一个地方,据说转换为整数的浮点数总是被截断(向零舍入),但我找不到整数 -> 浮点方向的任何内容。
c - MinGW 错误“未定义对 'typeof'' 的引用”
我得到一个“对'typeof'的未定义引用” - 编译和链接这个错误:
gcc 的版本是 4.3.3,命令行是“gcc.exe -std=c99 1.c -o 1.exe”。
floating-point - C99 and floating point environment
I was looking at new features of C99 and saw the floating point environment:
My question is simple. If I'm performing floating point number computations, do I have to include the above preprocessor directive in my code? If no, then what does this directive do and when does it become important to include?
Thanks a lot...
c - 定义中函数标题后的 C 变量声明
在阅读一些 FreeBSD 源代码时(参见:radix.h第 158-173行),我发现在定义中的“函数标题”之后的变量声明。
这在 ISO C (C99) 中有效吗?什么时候应该在生产代码中完成,而不仅仅是在“函数标题”中声明变量?为什么要在这里完成?
我指的是标题字符串的函数,如下所示:int someFunction(int i, int b) {
c++ - 结构位域最大大小(C99,C++)
位结构字段的最大位宽是多少?
我可以在 struct 中定义一个位域,位域的大小最多为 128 位、256 位或更大吗?有一些超宽向量类型,如 sse2(128 位)、avx1/avx2(256 位)、avx-512(下一个 Xeon Phis 为 512 位)寄存器;还有像gcc 中的__int128这样的扩展。
double - C99 中的 double_t
我刚刚读到 C99 的 double_t 应该至少和 double 一样宽。这是否意味着它在小数点后给出了更精确的数字?比通常的 15 位多双倍?。
二、使用方法:只包括
足够?我读到必须将 FLT_EVAL_METHOD 设置为 2 以获得长双精度。这该怎么做?当我使用数值方法时,我希望在不使用任意精度库的情况下获得最大精度。
非常感谢...
c - MS VS 2008 和 C99
我感兴趣地阅读了帖子“C99 的支持有多普遍?”。其中的一条评论指出微软不支持 C99。但是注释符号 // 适用于 VS 2008,并且该符号在 C99 中。我有两个问题:
VS 2008 在多大程度上支持 C99?
可以在同一代码中将 C89 和 C99 语法混合在一起吗?因此,如果我在 C89 中编写代码,然后添加注释 //。这意味着我有混合编码。那么在这种情况下编译器会做什么呢?先用 c89 检查我的代码,然后用 C99 检查我的代码是否接受我使用 // 进行评论?
c - 哪些可用的 GNU C 扩展在 C99 中实现并不容易?
为什么Linux内核只能用GCC编译?某些项目真正需要哪些 GNU C 扩展,为什么?
gcc - 如何使用 GCC 编译一个独立的环境?
我正在处理的代码应该可以为托管和独立环境构建,为后一种情况下的某些 stdlib 函数提供私有实现。
我可以在普通工作站/构建服务器上仅使用 GCC 可靠地测试它吗?使用 GCC 编译为独立环境
“-ffreestanding”选项看起来很有希望,但它似乎“仅”禁用内置插件并正确设置 STDC_HOSTED 宏,它仍然提供所有系统头文件。
选项“-nostdinc”过于严格;我仍然想使用独立实现所需的标头(特别是 stddef.h 和 limits.h)。
我在这里想念什么?
哦,我目前正在使用 GCC 4.4.3,将“很快”升级到 4.5.0。
c - 各种编译器中的编译指示 swp、ivdep、预取支持
在良好的 Altix 手册(altix_single_cpu_optimization http://wwwuser.gwdg.de/~parallel/parallelrechner/altix_documentation/altix_single_cpu_optimization.pdf)中,我找到了这个用于优化编译器的 pragmas-hints 列表
哪些编译器支持这些编译指示?什么实现了链接优化(软件流水线是低 ipc 和低注册数处理器的相当困难的优化之一)?