首页 文章
  • 1 votes
     answers
     views

    在Unix程序中退出状态约定

    考虑一个Unix命令 foo ,该命令逐行读取文件(或 stdin ),其中每行应遵循特定格式,例如 /etc/passwd 格式 . 如果任何行不正确(但不是全部),终止状态是 EXIT_SUCCESS 还是 EXIT_FAILURE ? 我试过参考标准, C11 Standard: 7.20.4.3 The exit functionPara 5 最后,控制权返回到主机环境 . 如果stat...
  • 129 votes
     answers
     views

    为什么“sizeof(a?true:false)”给出四个字节的输出?

    我有一小段关于带有三元运算符的 sizeof 运算符的代码: #include <stdio.h> #include <stdbool.h> int main() { bool a = true; printf("%zu\n", sizeof(bool)); // Ok printf("%zu\n", si...
  • -1 votes
     answers
     views

    glibc中strtoul的实现是否与C11标准冲突?

    以下是glibc实现的 stdlib.h 函数 strtoul 的描述: 函数:unsigned long int strtoul(const char * retrict string,char ** restrict tailptr,int base)初步:| MT-Safe区域设置| AS-Safe | AC-Safe |请参阅POSIX安全概念 . strtoul(“string-to...
  • 18 votes
     answers
     views

    什么ABI,如果有的话,限制[u] intmax_t的大小?

    从1999版开始,ISO C标准定义了一个标准头 <stdint.h> ,其中定义了typedef intmax_t 和 uintmax_t 等 . 这些分别指定"a (signed|unsigned) integer type capable of representing any value of any (signed|unsigned) integer type&q...
  • 34 votes
     answers
     views

    了解C11类型层次结构

    我想完全理解C11语言的类型层次结构并以图形方式呈现它(树形图将是完美的) . 该标准没有提供任何关于这个问题的数字 - 有30个点描述了它们之间的各种类型和关系 . 我想画它 . 我的尝试从获取ISO/IEC 9899:201x Committee Draft N1570并从文档的第6.2.5节中提取所有必要的陈述开始 . 然后,我开始以树的形式重新安排知识 . 让我分两步介绍我的工作 . 步骤...
  • 5 votes
     answers
     views

    是通过令牌连接未指定的行为重复宏调用吗?

    C11标准承认关于宏扩展中可能出现的至少一种情况的模糊性,当像宏这样的函数扩展到其未被识别的名称时,并且由下一个预处理令牌调用 . 标准中给出的例子是这样的 . #define f(a) a*g #define g(a) f(a) // may produce either 2*f(9) or 2*9*g f(2)(9) 该示例没有说明当扩展宏M时会发生什么,并且结果的全部或部分通过令牌连接贡...
  • 8 votes
     answers
     views

    强制编译器符合C99标准

    当我发现我已经使用了一段时间的匿名结构实际上只能在C11中使用,而不是C99时,我正在对我的项目进行编码,这是我想编写的标准 . 给出以下代码: struct data { int a; struct { int b; int c; }; }; int main() { struct data d; d.a = 0; ...
  • 5 votes
     answers
     views

    C89 / C90,C99和C11的兼容性

    我刚刚读到:C Wikipedia entry . 据我所知,有三种不同版本的C被广泛使用:C89,C99和C11 . 我的问题涉及不同版本的源代码的兼容性 . 假设我要编写一个程序(在C11中,因为它是最新版本)并导入一个用C89编写的库 . 根据C11规范编译所有文件时,这两个版本是否能够正常工作? Question 1 :C的较新版本是旧版C版本的C99,C11超集吗?我认为,超集我的意思是...
  • 0 votes
     answers
     views

    像_alloca一样在堆栈上分配对齐的内存

    _alloca() 的文档说here: _alloca例程返回一个指向已分配空间的void指针,保证适当地对齐以存储任何类型的对象 . 但是,here它说: _alloca需要16字节对齐,并且还需要使用帧指针 . 因此,似乎在第一个参考中他们忘记了32字节对齐的AVX / AVX2类型,如 __m256d . 令我困惑的另一件事是,第一页说 _alloca() 已被弃用,而它建议使用一...
  • 55 votes
     answers
     views

    是否通过C99中未指定的联合进行类型惩罚,并且它是否在C11中指定?

    Stack Overflow问题Getting the IEEE Single-precision bits for a float的一些答案建议使用 union 结构进行类型惩罚(例如:将 float 的位转换为 uint32_t ): union { float f; uint32_t u; } un; un.f = your_float; uint32_t target = ...

热门问题