假设我有一个预处理器判断:

#if(-6 & 5)
    #error "No 2's complement signed int"
#endif

如果我从2的补码机交叉编译到1的补码机,会发生什么.编译器是使用目标机器的算法,还是使用编译机器的算法?

谢谢

推荐答案

C 2018 6.10.1 4规定,对于#if#elif指令中的表达判断:

…为了进行此令牌转换和求值,所有有符号整数类型和所有无符号整数类型的行为就好像它们分别与头<stdint.h>中定义的类型intmax_tuintmax_t具有相同的表示形式一样…

这些类型当然是在程序执行期间使用的,因此它们的行为与执行环境相同.

C++相关问答推荐

try 使用sigqueue函数将指向 struct 体的指针数据传递到信号处理程序,使用siginfo_t struct 体从一个进程传递到另一个进程

从C函数调用asm函数时生成错误的BLX指令(STM32H753上的gcc)

找出文件是否包含给定的文件签名

单指针和空参数列表之间的函数指针兼容性

在struct中调用函数,但struct在void中 *

在C中使用JMP_buf数组进行线程化(在xv6中测试)

为什么C语言允许你使用var =(struct NAME){

在没有动态内存分配的情况下,用C语言最快地将各种数组复制到单个较大的数组中

getline()从c中的外部函数传递指针时输出null

一旦运行长度超过2,编译器是否会优化";strnlen(mystring,32)>;2";以停止循环?

初始成员、公共初始序列、匿名联合和严格别名如何在C中交互?

我在C程序的Flex/Bison中遇到语法错误

不带Malloc的链表

STM32 FATFS用户手册(Um1721)中的代码正确吗?

如何在C中处理流水线中的a、n命令?

意外的C并集结果

这些表达式是否涉及 C 中定义的复合文字?

在 C 中传递参数时出现整数溢出

React Native Android C++ TurboModules 静态 C 库链接问题

如何在Linux上从控制台左上角开始打印文本?