问题标签 [c11]
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.
visual-c++ - MSVC 上的 std::isfinite
C++11 和 C11 标准定义了
std::isfinite
函数。Visual Studio 2012 似乎没有将其作为
cmath
or的一部分提供,
math.h
但似乎提供了此功能。amp_math.h
isfinite
可以互换吗std::isfinite
?该文档没有讨论调用时的行为,NAN
并且我没有 VS 编译器来测试它。
c - struct 中间的可变长度数组 - 为什么这个 C 代码对 gcc 有效
有一些使用 VLA(可变长度数组)的奇怪代码被 gcc 4.6 视为有效 C(C99,C11):
此代码编译时没有警告:
同样适用于-std=c1x
:
但这不适用于英特尔 C 编译器或 Clang+LLVM:
所以:
- 为什么这被 GCC 认为是有效的?
- 如果它是 GCC 的扩展,它在哪里描述?
- 它在 C99 和 C11 ISO 标准中有效吗?
c - 当前 GCC(尤其是在 Ubuntu 上)的默认 C -std 标准版本是什么?
当我要求查看 cc 的当前版本时,我得到了这个。
我想知道的是正在使用 c89、c90、c99 或 c11 中的哪一个。
c - C99 fesetround()/fegetround() 状态是每个线程还是每个进程?
我在网上找到的 C 和 POSIX 参考资料没有指定 C99 的 fesetround() 的线程安全性。甚至 GNU 文档也没有[1]。状态是每个线程还是每个进程?
[1] https://www.gnu.org/software/hello/manual/libc.html#Rounding
c - C中的整数类型
假设我希望编写一个 C 程序(C99 或 C2011),我希望它是完全可移植的,并且不依赖于特定的体系结构。
看来我想彻底摆脱旧的整数类型 ( int
, long
, short
) 和朋友,只 int8_t
使用,uint8_t
等int32_t
(也许也使用least
andfast
版本)。
那么返回类型是main
什么?还是我们必须打击int
?是标准要求的int
吗?
GCC-4.2 允许我写
但我不能使用uint32_t
,甚至int8_t
因为那时我得到了
毫无疑问,这是因为 typedef。似乎这是我们不得不使用未指定大小类型的一种情况,因为它不是真正可移植的,除非我们将返回类型留给目标架构。这种解释正确吗?在代码库中有“只有一个”普通的旧代码似乎很奇怪,int
但我很高兴能够务实。
c - 是否可以将 C11 支持添加到 Xcode 4.6?
我只是想知道是否有一个插件允许在 Xcode 4.6 中支持 C11。
c - _Alignas 用于使用 clang 和 C11 的结构成员
我在使用 C11 和结构的 -Wpadded 时遇到了一些问题。
我已经阅读了Structure member alignment with _Alignas,我查看了 clang 文档,发现它现在受支持。
另外,我正在使用我最近从主干构建的一个非常新版本的 clang。
我遇到的问题是:
这给了我这个警告:
现在这不是_Alignas
为了什么吗?我尝试将它放在 int 成员声明之前,如下所示:
但同样的警告仍然存在。我还尝试将 _Alignas 放在各个地方,但无济于事。我在这里想念什么?
我知道我可以忽略这个特定的警告,并且我理解为什么填充很重要,所以我对解决方法或关于什么是填充的解释不感兴趣。我想知道如何以一种可移植的、符合标准的方式更改我的 C,以便不再发出警告。
c++ - Windows 上的 C11 线程
我正在 Windows 上的 Visual Studio 2012 express 中创建跨平台软件。由于显而易见的原因,我不能使用 .NET 的System::Threading::Thread
. 我希望在使用 VS2012 时可以使用 C11 的新线程特性(threads.h
不是pthread.h
),因为我创建了一个基于 .NET 表单的抽象框架。我开始相信 Windows 是不可能的。有人有想法吗。如果这些是我唯一的选择,我只会使用 C++ 库(boost 和 std)。
有没有人知道该怎么做?
c - 对gets_s的未定义引用?
我使用以下命令在 Ubuntu 4.6.1 和 SUSE 4.6.2 上使用 gcc
我的源代码是
详细说明我的问题:
对我来说,主要问题是行输入和保存的行之间的一一对应关系。
成功时,fgets 和 gets_s 之间的区别在于 fgets 包含换行符终止符,而 gets_s 将换行符终止符替换为空终止符,以便在行输入和成功调用 gets_s 之间保持一一对应。
对于溢出缓冲区长度的输入,fgets 接受适合缓冲区的字符数,并将其余字符留在输入缓冲区中以供下一个 fgets 使用。
标准(K.3.5.4.1)规定,gets_s(与gets不同)需要在n-1个字符内出现换行符、EOF或读取错误。因此溢出是违反运行时约束的。如果存在运行时约束违规,则将缓冲区中的第一个字符设置为空字符,并读取并丢弃 stdin 输入缓冲区中的字符,直到读取换行符为止,发生文件结尾或发生读取错误。
因此,在成功时,我期望:
溢出时,我预计 fgets 和 gets_s 的行为会有所不同。换句话说,
请注意我希望 gets_s 如何完全删除第一行输入的内容。
如果主要问题是输入行和保存行之间的一一对应关系,这在调试中很重要,我们仍然需要编写自己的函数(类似于 K&R 的 getline)
使用这样的函数,保持一一对应,缓冲区饱和并且没有运行时约束违规。
我得出这个结论是否正确。
c - 如何初始化和使用 C11 _Atomic 变量?
是否允许以下代码?
C11 规范 (n1570) 在 6.3.2.1p2 中说:
如果左值具有原子类型,则该值具有左值类型的非原子版本。
所以这似乎说没关系。