问题标签 [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.

0 投票
2 回答
8552 浏览

visual-c++ - MSVC 上的 std::isfinite

C++11 和 C11 标准定义了 std::isfinite 函数。Visual Studio 2012 似乎没有将其作为 cmathor的一部分提供, math.h似乎提供了此功能amp_math.h

isfinite可以互换吗std::isfinite?该文档没有讨论调用时的行为,NAN 并且我没有 VS 编译器来测试它。

0 投票
3 回答
7413 浏览

c - struct 中间的可变长度数组 - 为什么这个 C 代码对 gcc 有效

有一些使用 VLA(可变长度数组)的奇怪代码被 gcc 4.6 视为有效 C(C99,C11):

此代码编译时没有警告:

同样适用于-std=c1x

但这不适用于英特尔 C 编译器或 Clang+LLVM:

所以:

  1. 为什么这被 GCC 认为是有效的?
  2. 如果它是 GCC 的扩展,它在哪里描述?
  3. 它在 C99 和 C11 ISO 标准中有效吗?
0 投票
6 回答
56570 浏览

c - 当前 GCC(尤其是在 Ubuntu 上)的默认 C -std 标准版本是什么?

当我要求查看 cc 的当前版本时,我得到了这个。

我想知道的是正在使用 c89、c90、c99 或 c11 中的哪一个。

0 投票
1 回答
546 浏览

c - C99 fesetround()/fegetround() 状态是每个线程还是每个进程?

我在网上找到的 C 和 POSIX 参考资料没有指定 C99 的 fesetround() 的线程安全性。甚至 GNU 文档也没有[1]。状态是每个线程还是每个进程?

[1] https://www.gnu.org/software/hello/manual/libc.html#Rounding

0 投票
2 回答
1834 浏览

c - C中的整数类型

假设我希望编写一个 C 程序(C99 或 C2011),我希望它是完全可移植的,并且不依赖于特定的体系结构。

看来我想彻底摆脱旧的整数类型 ( int, long, short) 和朋友, int8_t使用,uint8_tint32_t(也许也使用leastandfast版本)。

那么返回类型是main什么?还是我们必须打击int?是标准要求的int吗?

GCC-4.2 允许我写

但我不能使用uint32_t,甚至int8_t因为那时我得到了

毫无疑问,这是因为 typedef。似乎这是我们不得不使用未指定大小类型的一种情况,因为它不是真正可移植的,除非我们将返回类型留给目标架构。这种解释正确吗?在代码库中有“只有一个”普通的旧代码似乎很奇怪,int但我很高兴能够务实。

0 投票
1 回答
220 浏览

c - 是否可以将 C11 支持添加到 Xcode 4.6?

我只是想知道是否有一个插件允许在 Xcode 4.6 中支持 C11。

0 投票
1 回答
3726 浏览

c - _Alignas 用于使用 clang 和 C11 的结构成员

我在使用 C11 和结构的 -Wpadded 时遇到了一些问题。

我已经阅读了Structure member alignment with _Alignas,我查看了 clang 文档,发现它现在受支持。

另外,我正在使用我最近从主干构建的一个非常新版本的 clang。

我遇到的问题是:

这给了我这个警告:

现在这不是_Alignas为了什么吗?我尝试将它放在 int 成员声明之前,如下所示:

但同样的警告仍然存在。我还尝试将 _Alignas 放在各个地方,但无济于事。我在这里想念什么?

我知道我可以忽略这个特定的警告,并且我理解为什么填充很重要,所以我对解决方法或关于什么是填充的解释不感兴趣。我想知道如何以一种可移植的、符合标准的方式更改我的 C,以便不再发出警告。

0 投票
3 回答
10330 浏览

c++ - Windows 上的 C11 线程

我正在 Windows 上的 Visual Studio 2012 express 中创建跨平台软件。由于显而易见的原因,我不能使用 .NET 的System::Threading::Thread. 我希望在使用 VS2012 时可以使用 C11 的新线程特性(threads.h不是pthread.h),因为我创建了一个基于 .NET 表单的抽象框架。我开始相信 Windows 是不可能的。有人有想法吗。如果这些是我唯一的选择,我只会使用 C++ 库(boost 和 std)。

有没有人知道该怎么做?

0 投票
2 回答
5960 浏览

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)

使用这样的函数,保持一一对应,缓冲区饱和并且没有运行时约​​束违规。

我得出这个结论是否正确。

0 投票
1 回答
3211 浏览

c - 如何初始化和使用 C11 _Atomic 变量?

是否允许以下​​代码?

C11 规范 (n1570) 在 6.3.2.1p2 中说:

如果左值具有原子类型,则该值具有左值类型的非原子版本。

所以这似乎说没关系。