编译器和预编译器的区别
时间: 2023-11-12 10:58:27 浏览: 40
编译器和预编译器都是程序员在开发过程中经常使用的工具,它们的主要区别在于它们处理代码的时间不同。
预编译器是在编译代码之前运行的程序,它主要负责处理以 # 开头的预处理指令,例如 #include 和 #define 等。预编译器会将这些指令替换为实际的代码,以便编译器在编译时能够正确地处理它们。预编译器还可以定义宏、条件编译等功能。
编译器是将源代码转换为可执行代码的程序。它会将源代码分析、优化、生成中间代码、生成汇编代码、链接库等一系列操作。编译器的输出结果是可执行文件或者库文件。
相关问题
ARM编译器中预定义的宏
在 ARM 编译器中,有一些预定义的宏可以用于条件编译和编译时的信息查询。以下是一些常用的预定义宏:
1. __ARM_ARCH__: 定义了当前目标处理器的架构版本号。例如,__ARM_ARCH_7__ 表示 ARMv7 架构。
2. __ARM_ARCH_ISA_ARM:__ 如果目标处理器的指令集架构是 ARM,则定义为 1。
3. __ARM_ARCH_ISA_THUMB:__ 如果目标处理器的指令集架构是 Thumb,则定义为 1。
4. __ARM_ARCH_PROFILE:__ 定义了当前目标处理器的架构配置文件。例如,__ARM_ARCH_PROFILE_A__ 表示 ARMv7-A 架构。
5. __ARM_FEATURE_DSP:__ 如果目标处理器支持数字信号处理(DSP)扩展,则定义为 1。
6. __ARM_FEATURE_SIMD32:__ 如果目标处理器支持 32 位单指令多数据(SIMD)扩展,则定义为 1。
7. __ARM_FEATURE_SIMD64:__ 如果目标处理器支持 64 位单指令多数据(SIMD)扩展,则定义为 1。
8. __ARM_FP:__ 定义了当前目标处理器的浮点数支持级别。可能的取值包括:
- 0:无浮点支持
- 2:VFPv2 浮点支持
- 3:VFPv3 浮点支持
- 4:VFPv4 浮点支持
- 5:ARM 浮点扩展(NEON)支持
这些预定义宏可以在编译时用于条件编译,根据目标处理器的架构和特性选择不同的代码路径或功能选项。
LINUX 编译器预定义宏
LINUX编译器预定义了一些宏,这些宏可以在代码中使用,以便根据操作系统的不同采取不同的操作。例如,常见的LINUX编译器预定义宏有__linux__、__unix__、__GNUC__、__STDC__等。其中,__linux__宏表示代码正在Linux操作系统上编译,__unix__宏表示代码正在类Unix操作系统上编译,__GNUC__宏表示使用的是GNU编译器,__STDC__宏表示代码符合C语言标准。这些宏的存在可以让程序员根据不同的操作系统选择不同的代码逻辑或功能实现。<span class="em">1</span><span class="em">2</span>
#### 引用[.reference_title]
- *1* [linux/windows下获取gcc(mingw)编译器预定义宏的方式](https://blog.csdn.net/10km/article/details/49023471)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [ylog:C++ 轻量级日志类](https://download.csdn.net/download/weixin_42151599/19241156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]