首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么gcc的-### pro.c没有显示预处理器的调用?

GCC是一款开源的编译器套件,它包含了预处理器、编译器、汇编器和链接器等工具。在使用GCC编译C程序时,可以通过添加参数来控制编译过程中的输出信息。

在给GCC添加参数"-###"后,GCC会输出编译过程中的详细信息,包括预处理器的调用。然而,当我们使用"-###"参数编译一个只包含预处理指令的C文件时,如"pro.c",GCC并不会显示预处理器的调用。

这是因为GCC在处理C文件时,会根据文件的扩展名来确定使用哪个工具进行处理。对于扩展名为".c"的文件,GCC会直接调用预处理器进行预处理,并将结果传递给编译器进行编译。因此,在只包含预处理指令的C文件中,预处理器的调用被隐式地包含在编译过程中,不会单独显示出来。

总结起来,当我们使用GCC的"-###"参数编译一个只包含预处理指令的C文件时,预处理器的调用不会显示出来,因为GCC会隐式地调用预处理器并将其结果传递给编译器进行编译。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Linux】————Makefile编写

1.GCC常见命令 1.1 查看gcc版本号 1.2 GCC输出目标文件 可以使用gcc code.c -o code用于输出目标文件 1.3 编译流程 GCC编译器编译流程是:预处理、编译 、汇编和链接...这样你就表明了依赖关系,我们是父子关系,但是后面什么都没有说了,你爸爸以为你遇到了什么危险. 这个时候你又打过去了说:“孩子没钱了,打点生活费吧",此时这个便才是依赖方法....依赖方法: 必须第依赖关系下一行,以Tab键为空开始写. 编译源文件,需要用到gcc,之前所讲过....gcc test.c -o mytest 这样一个简单Makefile文件便写好了....gcc -o pro pro.c .PHONY:clean clean: rm -rf pro 然后推出make编译输出即可 最后: 十分感谢你可以耐着性子把它读完和我可以坚持写到这里

6910
  • C源代码是如何跑起来

    但是不同 IDE 会出现不同按钮,甚至还有多个按钮,什么先点编译,后点运行(当时老师就是这么说,咱也不知道为什么,照着做就是了)。 ?...进行预处理,调用处理器,使用命令 gcc -E hello.c -o hello.i 现在生成了一个名为 hello.i 文件,打开来看一下有什么变化。 ?...可以看到,在源代码基础上,#include 所在语句没有了,与之替换是一堆声明,增加了几百行,也就是说,在预处理阶段,预处理器会将我们 C 源代码中所有宏定义(带 # 符号语句...这个函数是在标准库中定义,我们写 hello.c 源代码时没有对它进行定义,只对它进行调用,C 程序不认识这个函数,想要让 C 程序认识这个函数就必须找到它定义位置,链接就是负责把我们在源代码中调用函数从它定义文件中加载过来...链接完成之后,我们就可以调用加载器对该程序进行加载运行,最激动人心时刻就要到来了,经过一系列复杂步骤,屏幕上终于显示出了 Hello, world! ? 嗨,你还在看吗?

    88810

    【嵌入式】基于ARM嵌入式Linux开发总结

    、中止模式(对应数据中止异常、取指中止)、SVC管理模式(软中断、复位)、SM安全监视器模式。...(2)不同点: ① 编译工具链一般用于本机编译、本机执行开发模式; ② 交叉编译工具链用于宿主机编译,目标机运行交叉开发模式; ③ 编译器一般Linux发行版都配备,直接调用gcc命令即可;...函数返回值 正常:结束子进程进程号 使用选项WNOHANG且没有子进程结束时:0 调用出错:-1 所需头文件 #include #include <sys/wait.h...,只要指定子进程还没有结束,waitpid就会一直等下去。...函数返回值 正常:结束子进程进程号 使用选项WNOHANG且没有子进程结束时:0 调用出错:-1 进程结束:exit()和_exit() 所需头文件 exit:#include <stdlib.h

    18.4K21

    这篇文章不知道起什么名字

    ,把C变量名称作为汇编语言中注释 这个可以一次编译许多中间文件 -save-temps:自动输出预编译处理文件、汇编文件、对象文件,编译正常进行 –help:显示gcc帮助说明 -target-help...:显示目标机器特定命令行选项 –version:显示gcc版本号和版权信息 -E:只进行预处理,不编译 -S:只编译,不汇编 -c:只编译、汇编,不链接 -pipe:使用管道代替临时文件 -combine...生成规则可以是单行,但如果太长,就用’/’换行符连续成多行。规则显示在标准输出,不产生预处理过C程序 -C:告诉预处理器不要丢弃注释。...创建并使用静态链接库方法 编写C源文件,设为static_lib.c,其中写入需要重复调用函数,然后使用命令gcc -c static_lib.c生成目标文件static_lib.o 使用ar工具创建静态库.../static_lib.a -o app编译生成可执行文件app 创建并使用动态库方法 编写C源文件share_lib.c,写入需要重复调用函数,然后使用命令gcc -shared -FPIC -o

    74030

    【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )

    异常相关概念 (1) 异常 ---- 异常定义 : 1.异常简介 : 由于 内部或者外部一些事件 , 导致 处理器停下正在处理工作, 转而去处理这些发生事; 2.处理器状态 : 当遇到异常时候..., 1.Reset : 处理器在工作时, 突然 按下重启键, 就会触发该异常; 2.Undefined instructions : 处理器无法识别指令异常, 处理器执行指令是有规范, 如果 尝试执行...Abort (instruction fetch memory abort) : 取指令失败, ARM 在执行指令过程中, 要先去取指令准备执行, 如果取指令失败, 就会产生该异常; 5.Data...: C 代码编译成同名 .o 文件, %.o : %.c , 产生过程是 arm-linux-gcc -g -c $^ ; 3.设置最终目标 : 使用 all: 设置最终编译目标; ( 1...gboot.bin 文件 %.o : %.S #通用规则, 如 start.o 是由 start.S 编译来, -c 是只编译不链接 arm-linux-gcc -g -c $^

    3.7K10

    gcc基本命令_cmake 命令

    显示特定类型命令行选项(使用 -v --help 显示子进程命令行选项)。 -dumpspecs :显示所有内置规范字符串。 -dumpversion :显示编译器版本。...-dumpmachine :显示编译器目标处理器。 -print-search-dirs :显示编译器搜索路径中目录。 -print-libgcc-file-name :显示编译器配套库名称。...-Wp, :将逗号分隔 传递给预处理器(preprocessor)。...-v :显示编译器调用程序。 -### :与 -v 类似,但引用选项和命令不执行。 -E :仅执行预处理(不要编译、汇编或链接)。 -S :只编译(不汇编或链接)。...这里在链接时使用 -Wl,-rpath=/path/to/yours 选项,-Wl 会发送以逗号分隔选项到链接器,注意逗号分隔符后面没有空格哦。

    73540

    GCC、ARM-LINUX-GCC、ARM-ELF-GCC浅析

    大家好,又见面了,我是全栈君 一、GCC简介: The GNU Compiler Collection,通常简称GCC,是一套由GNU开发编译器集,为什么是编辑器集而不是编译器呢?...另外GCC对硬件平台支持,可以所无所不在,它不仅支持X86处理器架构, 还支持ARM, Motorola 68000, Motorola 8800, Atmel AVR, MIPS等处理器架构。...GCC一般工具通常都是通过在命令行上调用命令(如gcc)来执行。在使用交叉编译情况下,这些工具将根据它编译目标而命名。...…… …… 可以看出arm-linux-gccGCC所需安装包名字大同小易,可这是为什么呢?...不知道网友没有想到过这个问题,可能网友知道这些包跟GCC所用包是不相同,仅仅名字不一样而已,但是知道为什么不一样恐怕还是有相当多的人不清楚。

    6.7K10

    Linux gcc命令具体使用

    GCC初衷是为GNU操作系统专门编写一款编译器。GNU系统是彻底自由软件。此处,“自由”含义是它尊重用户自由。 02. 命令格式 用法:gcc [选项] 文件… 03....显示特定类型命令行选项 (使用‘-v --help'显示子进程命令行参数) --version 显示编译器版本信息 -dumpspecs 显示所有内建 spec 字符串...-dumpversion 显示编译器版本号 -dumpmachine 显示编译器目标处理器 -print-search-dirs 显示编译器搜索路径 -print-libgcc-file-name...-Wp, 将逗号分隔 传递给预处理器 -Wl, 将逗号分隔 传递给链接器 -Xassembler 将 传递给汇编器...目录> 将 作为头文件和库文件根目录 -B 将 添加到编译器搜索路径中 -v 显示编译器调用程序 -###

    2.7K43

    深入浅出GCC编译器

    后来随着其功能扩展,可以支持更多编程语言,如C++、Java、Fortran、Pascal、Objective -C、Ada、Go以及各类处理器架构上汇编语言等。...GCC编译文件时候由GCC编译器调用。...我这里生成了4个可执行文件,有==.out== 后缀,有没有后缀,甚至还有一个 .pp 后缀,但他们都是可执行 (2)参数及工具 ① 预处理阶段 预处理也叫做预编译,这个阶段GCC调用 cpp...那么,我们为什么要重定向到一个.i文件中,而不是重定向到.c文件中呢?前面说了,GCC通过文件后缀来区分文件类型,只有.i文件才能作为编译输入,这么做是为了下一步。...(7)-Wall 显示更多警告信息 当GCC在编译过程中检查出错误的话,它就会中止编译,并报错。

    32410

    linuxgcc使用方法_linux怎么用gcc编译

    GCC初衷是为GNU操作系统专门编写一款编译器。GNU系统是彻底自由软件。此处,“自由”含义是它尊重用户自由。 02. 命令格式 用法:gcc [选项] 文件… 03....) –version 显示编译器版本信息 -dumpspecs 显示所有内建 spec 字符串 -dumpversion 显示编译器版本号 -dumpmachine 显示编译器目标处理器 -print-search-dirs...显示编译器搜索路径 -print-libgcc-file-name 显示编译器伴随库名称 -print-file-name= 显示 完整路径 -print-prog-name= 显示编译器组件...传递给汇编器 -Wp, 将逗号分隔 传递给预处理器 -Wl, 将逗号分隔 传递给链接器 -Xassembler 将 传递给汇编器 -Xpreprocessor 将 传递给预处理器 -Xlinker...-B 将 添加到编译器搜索路径中 -v 显示编译器调用程序 -### 与 -v 类似,但选项被引号括住,并且不执行命令 -E 仅作预处理,不进行编译、汇编和链接 -S 编译到汇编语言,不进行汇编和链接

    6.7K20

    TI Sitara系列 AM64x开发板——FreeRTOS、Baremetal案例开发案例

    FreeRTOS与Baremetal案例评估板简介创龙科技TL62x-EVM是一款基于TI Sitara系列AM62x单/双/四核ARM Cortex-A53 + 单核ARM Cortex-M4F异构多核处理器设计高性能低功耗工业评估板...处理器ARM Cortex-A53(64-bit)主处理单元主频高达1.4GHz,ARM Cortex-M4F实时处理单元主频高达400MHz,采用16nm最新工艺,具有可与FPGA高速通信GPMC并口...图 31图 32CPU初始化本小节主要讲述如何调用GEL脚本初始化CPU方法。在Windows右键“我电脑”,选择“属性(R) -> 高级系统设置”,打开如下系统属性界面。...图 50用户可根据实际应用配置GPIO引脚,在代码中调用已配置GPIO引脚是以"*.syscfg"配置文件中Name为标识。...图 55用户可根据实际应用配置UART,在代码中调用已配置UART引脚是以"*.syscfg"配置文件中Name为标识。

    1.2K20

    抛砖引玉-计算机系统

    ,都是由一串比特表示 (预处理器、编译器、汇编器、链接器)一起构成了编译系统(compilation system) gcc -E hello.c -o hello.i 预处理阶段,预处理器(cpp...)根据以字符 # 开头命令,修改原始 C 程序; 第一行中 #include 命令告诉预处理器读取系统头文件 stdio.h 内容;并把它直接插入程序文本中 gcc -S hello.i...这些指令将 “hello, world\n” 字符串中字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上 系统花费了大量时间把信息从一个地方挪到另一个地方,系统设计者采用了更小更快存储设备...,称为 高速缓存存储器,存放处理器近期可能会需要信息 当shell加载和运行hello程序时,以及hello程序输出自己消息时,shell和hello程序都没有直接访问键盘、显示器、磁盘或者主存。...C标准库和数学库这样共享库代码和数据区域 l 栈:位于用户虚拟地址空间顶部是用户栈,编译器用它来实现函数调用 l 内核虚拟内存:地址空间顶部区域是为内核保留,不允许应用程序读写这个区域内容或者直接调用内核代码定义函数

    21620

    避免这7个误区,才能让【宏】削铁如泥

    我们知道所有宏定义都将被重新扫描以查找更多要替换宏,如果自引用被认为是宏使用,它将产生无限大扩展。 为防止这种情况,自引用不被视为宏调用。它原样传递到预处理器输出中。...实际上,每当在运行文本中使用预处理器时,预处理器都会将其单独保留。 如果宏x扩展为使用宏y,而y扩展引用了宏x,则这是x间接自引用。...如果按照给定方式替换了参数,并且没有进行扫描,则剩余单个扫描将找到相同调用并产生相同结果。 扫描处理在以下三种特殊情况下有大作用。...扫描会导致发生预期结果。 如果没有扫描,f(1)本身将被替换为参数,并且f内部使用将在主扫描期间作为间接自引用出现,并且不会扩展。...调用其他可进行字符串化或连接宏 如果参数是字符串化或串联,则不会进行扫描。 如果要扩展宏,然后对其扩展进行字符串化或串联,则可以通过使一个宏调用进行该字符串化或串联另一宏来实现。

    1.2K20

    《深入理解计算机系统》阅读笔记--程序机器级表示(上)

    一、为什么要学习和了解汇编 编译器基于编程语言规则,目标机器指令集和操作系统遵循惯例,经过一系列阶段生成机器代码。...GCC c语言编译器以汇编代码形式产生输出,汇编代码是机器代码文本表示,给出程序中每一条指令。然后GCC调用汇编和链接器,根据汇编代码生成可执行机器代码。...但是如果是用汇编语言,程序员就必须制定程序用来执行计算低级指令。 那么为什么我们还要学习和了解汇编呢?...,了解不同线程是如何共享程序数据或保持数据私有的,以及准确知道如何在哪里访问共享数据,这些在机器代码都是可见 二、历史 Inter处理器系统俗称x86,第一代处理器是8086,一个单芯片,16位微处理器...GCC命令调用了一整套程序,将源代码转换为可执行代码: C预处理器扩展源代码,插入所有用#include 命令指定文件,并扩展所有用#define声明制定宏。

    75300

    vppinfra--字节序转换、bitops、cacheline、jmp机制

    其实这些宏是gcc默认宏定义选项。...最终调用gcc内置(buildin)函数 /*按照字节进行反转,返回反转后结果*/ uint16_t __builtin_bswap16 (uint16_t x) bitops相关api bit...always_inline uword count_set_bits (uword x) { #ifdef __POPCNT__ /*gcc默认宏定义吧,目前再我自己环境上没有设置*/ #if uword_bits...CLIB_CACHE_LINE_ROUND(x) ((x + CLIB_CACHE_LINE_BYTES - 1) & ~(CLIB_CACHE_LINE_BYTES - 1)) 下面是cache取相关函数...因此,在处理器处理当前指令/数据时,可以从内存中把相邻区域指令/数据读取到Cache中,这样,当处理器需要处理相邻内存区域指令/数据时,可以直接从Cache中读取,节省访问内存时间。

    75120

    Linux 程序编译过程详解

    本文所要介绍将C/C++语言编写程序转换成为处理器能够执行二进制代码过程即由编译器完成。...有关反汇编详细介绍,请参见后文。 readelf:显示有关ELF文件信息,请参见后文了解更多信息。...C语言标准仅仅定义了C标准库函数原型,并没有提供实现。因此,C语言编译器通常需要一个C运行时库(C Run Time Libray,CRT)支持。C运行时库又常简称为C运行库。...汇编 汇编过程调用对汇编代码进行处理,生成处理器能识别的指令,保存在后缀为.o目标文件中。...由于每一个汇编语句几乎都对应一条处理器指令,因此,汇编相对于编译过程比较简单,通过调用Binutils中汇编器as根据汇编指令和处理器指令对照表一一翻译即可。

    1.9K30

    【Linux】--- Linux编译器-gccg++、调试器-gdb、项目自动化构建工具-makeMakefile 使用

    链接(生成可执行文件或库文件): 实例: gcc hello.o –o hello。在成功编译之后,就进入了链接阶段,最后形成可执行程序。 那么为什么会有这些过程呢? 这就要说到编程语言历史了。...最初计算机只能处理二进制,二进制是处理器“母语”。这叫“机器语言”或者“机器码”。...那为什么不直接将c语言转为二进制目标文件呢?因为前人已经写好了汇编编译器,我们只需站在巨人肩膀上,再将高级语言转为较简单汇编代码即可。 那么如何形成第一个汇编写汇编编译器呢?...最后答案是:系统把这些函数实现都被做到名为 libc.so.6库文件中去了,在没有特别指定时,gcc会到系统默认搜索路径 /usr/lib下进行查找,也就是链接到 libc.so.6库函数中去,这样就能实现函数...,那么它后面所定义命令将不会被自动执行,不过,我们可以显示要make执行。

    38620

    Linux 程序编译过程来龙去脉

    GCC GCC(GNU C Compiler)是编译工具。本文所要介绍将C/C++语言编写程序转换成为处理器能够执行二进制代码过程即由编译器完成。...有关反汇编详细介绍,请参见后文。 readelf:显示有关ELF文件信息,请参见后文了解更多信息。...,生成处理器能识别的指令,保存在后缀为.o目标文件中。...由于每一个汇编语句几乎都对应一条处理器指令,因此,汇编相对于编译过程比较简单,通过调用Binutils中汇编器as根据汇编指令和处理器指令对照表一一翻译即可。...// GCC选项-c使GCC在执行完汇编后停止,生成目标文件 //或者直接调用as进行汇编 $ as -c hello.s -o hello.o //使用Binutils中as将hello.s文件汇编生成目标文件

    2.9K30
    领券