我正在制作自己的 C 编译器,以尝试了解有关 C 的尽可能多的细节。我现在正试图准确了解volatile对象的工作原理。 令人困惑的是,代码中的每个读取访问都必须严格执行(C11,6.7.3p7): 具有 volatile 限定类型的 object 可能会以实现未知的方式进行修改或具有其他未知的副 ...
我正在制作自己的 C 编译器,以尝试了解有关 C 的尽可能多的细节。我现在正试图准确了解volatile对象的工作原理。 令人困惑的是,代码中的每个读取访问都必须严格执行(C11,6.7.3p7): 具有 volatile 限定类型的 object 可能会以实现未知的方式进行修改或具有其他未知的副 ...
在 C(如果需要具体的话,就说 C11),下面的程序是否定义明确? 它会始终打印a=3 b=4还是编译器优化会影响 output? (现实世界的动机是提供只应该由特定模块(即源文件)修改的结构的只读公共“视图”。) ...
根据参考资料, _Atomic类型说明符不能用于 arrays。 是否有标准方法/解决方法可以为存储在数组中的 object 发出atomic_exchange调用? ...
有关的 C11中_Generic的语法和示例用法 _Generic 适用于 typedef 结构还是仅适用于原始类型? 如何将 _Generic 与 C 中类型定义的结构一起使用? 今天是个好日子! 我正在编写一个区分输入结构类型的宏。 我在 WinLibs 的 Windows 下使用 MinG ...
所以我有一个 .txt 文件,我想使用 scanf() 在 c11 程序中通过 stdin 读取该文件。 该文件本质上是由一个字符串组成的多行。 例子: 我怎么知道文件何时完成,我尝试将字符串与仅使用 eof 字符的字符串进行比较,但代码循环出错。 非常感谢任何建议。 ...
我有一个简单的程序(一个非常简单的 malloc/free 实现,最初是为大学作业编写的),它必须检查 free 中指针的“有效性”,为此我需要取消引用它。 当用户提供 bs 指针时,为了避免 Segfaults,我想检查内存当前是否映射到我的地址空间。 我想用类似的东西来做到这一点 现在,问 ...
假设我需要分配struct A但b需要 4 对齐。 我想我可以手动填充malloc()返回的指针。 有什么更干净的方法吗? 就像 gcc 的__attribute__((aligned(4)))一样,但它对齐了整个结构。 我不能改变它的布局。 ...
我给出了上述问题的解决方案,注意我在这里使用的是 DevC++ 代码编辑器 ...
C (C99+) 标准要求(虽然隐含地)一个符合要求的实现来将__STDC__定义为 1。 但是,C 标准不需要符合 IEC 60559 的实现来定义__STDC_IEC_559__ (为 1)。 结果: 在这里我们看到这些宏的语义不一致。 任何想法为什么? 这是一个可能的缺陷吗? 为什么 C ...
我正在尝试编译一个程序,我已经能够在其他几个 Debian 环境中编译,使用 C11 <threads.h>库在相对较新的安装 Debian Bullseye 和“ gcc (Debian 10.2.1-6) 10.2.1 20210110 》已安装用命令gcc -o <prog ...
目前看来_Thread_local独立于__STDC_NO_THREADS__ 。 结果:即使实现将__STDC_NO_THREADS__定义为 1,它仍然需要支持(至少接受) _Thread_local 。 我想这是一个缺陷。 那是对的吗? UPD:C2x的相关提案: http://www.o ...
enum { compile_time_assertion = 1 / ("description" && 1); }; 上面的代码片段是否符合 C11? 将字符串文字作为表达式的一部分可能会违反初始化表达式的众多约束之一。 6.6p7 列出了一个地址常量作为可能的初始化表达 ...
vector<vector<int>> v(100, vector<int>(100)); // 101 vector<int> are created 我需要像上面那样创建一个向量(或对象)向量。 但随后将创建 101 个vector<int ...
看起来typeof运算符可能会被下一个 C 标准接受,我正在寻找是否有办法利用它来使用可移植的 ISO-C 创建一个宏,该宏可以获取传入的数组的长度如果将指针传递给它,则编译失败。 通常,泛型选择可用于在使用不需要的类型时通过将其排除在泛型关联列表之外来强制编译器错误,但在这种情况下,我们需要一个默 ...
这是这个问题的后续问题。 以下代码在Compiler Explorer上。 虽然my_copy看起来做作,但访问模式是由硬件强制执行的(必须对连续对齐的位置进行 2x 32 位写入)。 丑陋的 rest 是由于不同开发人员相隔几年编写的几段代码的交集。 问题是,传递给my_copy的 argumen ...
鉴于以下代码,我有一些与类型双关相关的问题。 我看不出有任何方式表明这没有违反严格的别名规则,但我无法指出具体的违规行为。 我最好的猜测是将工会成员传递到 function 违反了严格的别名。 以下代码在Compiler Explorer上。 我的观察: 假设 arguments 到func之间不 ...
本地static变量是自动线程本地的,还是在线程之间共享? ...
我写了“轻量级”时间库,我有这样的结构和类型定义: 我有一个返回 tm_t 的tm_t : 我想这样使用它: 我收到此错误: 从类型 'int' 分配给类型 'tm_t' {aka 'struct tmt'} 时类型不兼容我也试过像这样更改 function 和变量: 我做错了什么? ...
面对一个我们无法摆脱的警告。 我正在使用带有标准 C11 编译器的 stm32 MCU 和 STM32CubeIDE。 我想我能理解为什么编译器会发出警告,但问题是我无法解决。 任何帮助表示赞赏。 谢谢你。 指针数组是这样定义的 要调用的function是这样定义的: 实际的 function 调用 ...
在使用 C#、Java 等高级语言多年后,我重新发现了 C 并且我正在使用类似泛型的函数,我正在尝试编写类似函子等的东西。 我写了这样的东西: 所以它有效。 问题是: C有人这样写吗? 意见免费版: C专业程序员(操作系统、数据库、标准库源码)会出现这样的写法吗? 这是否被认为是不好的做法,不受欢 ...