当前位置: 首页 > 知识库问答 >
问题:

`C Visual Studio编译器中的LL`vs`i64`后缀

慎志国
2023-03-14

我正在尝试重构一个旧的C代码。在某种程度上,我有点像:

#if defined(WIN32) && !(defined(__CYGWIN__) || defined(__MINGW32__))
#  define I64_CONST(X)  X ## i64
#else
#  define I64_CONST(X)  X ## LL
#endif

因此,要在代码中定义64位文字,可以使用以下内容:

(uint32_t)((data_in >> 32) & I64_CONST(0x00000000ffffffff));

这是用于在Microsoft编译器中使用i64后缀,在其他编译器中使用LL后缀。由于我正在为C 17调整它,并且我们的最低要求是使用Visual Studio 2019,是否可以删除它并在任何地方使用LL,或者是否存在一些问题,最好保持编译器之间的区别?

共有1个答案

万俟皓
2023-03-14

是的,long-long是自C 11以来的一种新类型,它至少包含64位,因此可以用于文本(除非源代码使用2的补码,而编译器使用1的补码/符号大小,否则-263将不适用)

另一种方法是在

#define I64_CONST INT64_C
auto v = INT64_C(0xFFFF0000FFFF0000);

请参阅使用UINT64_C的目的?

 类似资料:
  • 在我参加的一个reactJS会议上,演讲者使用了一个术语转译器来进行一些代码转换/移植。当涉及到将语言代码转换为计算机系统/机器上的可运行形式时,我总是使用和听到术语编译器和解释器。转译器对我来说是新的。转译器与编译器或解释器有什么不同,为什么真的需要它?

  • 创建指令时,可以将代码放入编译器、链接函数或控制器中。 在文件中,他们解释说: 编译和链接功能用于角度循环的不同阶段 然而,对我来说还不清楚,哪种代码应该去哪里。 例如:我可以在compile中创建函数并将它们附加到link中的作用域,还是只将函数附加到controller中的作用域? 如何在指令之间共享控制器,如果每个指令可以有自己的控制器?控制器是真的共享,还是只是范围属性?

  • 后编译指的是应用依赖的 NPM 包并不需要在发布前编译,而是随着应用编译打包的时候一块编译。 注: 关于后编译更详细内容可参阅 webpack 应用编译优化之路 背景 使用 webpack + babel 开发应用越来越多,而且一般都是通过 NPM 进行包管理的,这样依赖包越来越多,这些依赖包也是使用的 ES2015+ 开发的,所以每个依赖包都需要编译才能发布,这样编译后代码中往往后包含很多编译代

  • 前言 预处理 简述 打印出预处理之后的结果 在命令行定义宏 编译(翻译) 简述 语法检查 编译器优化 生成汇编语言文件 汇编 简述 生成目标代码 ELF 文件初次接触 ELF 文件的结构 三种不同类型 ELF 文件比较 ELF 主体:节区 汇编语言文件中的节区表述 链接 简述 可执行文件的段:节区重排 链接背后的故事 用 ld 完成链接过程 C++ 构造与析构:crtbegin.o 和 crten

  • 编译器 编译器将用一种语言编写的代码转换为另一种语言,而无需更改程序的含义。还期望编译器应该使目标代码高效且在时间和空间方面得到优化。 编译器设计原理提供了翻译和优化过程的深入视图。编译器设计涵盖了基本的转换机制以及错误检测与恢复。它包括词法,语法和语义分析作为前端,以及代码生成和优化作为后端。 为什么要学习编译器设计? 计算机是软件和硬件的平衡组合。硬件只是机械设备的一部分,其功能由兼容的软件控