|
|
1
3
根据评论中的讨论,问题是C标准的规范是否提供了一种可靠的方法来确定断言在任何特定的C实现中是否成立。(因此,问题不在于C实现是否可以提供某种方式来了解这一点,比如通过预定义程序可以测试的预处理器宏。问题在于是否有一种测试在所有C实现中都有效。) 答案是否定的。 由于这个答案依赖于C标准中没有这方面的事实,因此除了参考整个C标准外,没有其他方法可以证明这一点。我对当前的C标准相当熟悉,并认为它没有提供任何这样的机制。 注释69至C 2018 6.3.2.2 5告诉我们,将指针转换为整数或将整数转换为指针的映射函数旨在与执行环境的寻址结构保持一致,但这不是标准的规范部分,我相信标准中没有规定任何关于此映射的信息应由C实现提供。指针和整数映射也没有任何规定的属性来测试断言是否始终成立。 |
|
2
1
你真的不能在整数常量表达式中进行指针运算。因此,我认为正确编译测试的唯一方法是创建另一个程序并输出一个预处理器常量,您可以在该常量上执行以下操作
然而,这可能不是必要的。一个事实上的compiletime表达式可能会这样做。在gcc和clang上都有一个测试,例如:
已优化(不与clang一起使用
要测试任何指针,您应该测试允许具有不同表示的指针类型。本机指针类型可以。结构/联合指针不能。 或者,不要测试和声明不值得支持的平台。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |