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

gcc编译器开关printf使用puts调用

GCC编译器是一款开源的编程语言编译器,常用于C语言和C++语言的编译。它提供了许多开关选项(switches)来控制编译过程和生成的可执行文件的行为。

对于使用printf函数和puts函数的调用方式,GCC编译器提供了不同的开关选项来优化代码的执行效率和可读性。

  1. printf函数: printf函数用于将格式化的数据输出到标准输出(终端窗口)。在使用printf函数时,可以使用以下开关选项:
  • -fno-builtin:禁用内建的printf函数,这将导致编译器在编译时不会做任何优化,并且使用外部的printf库函数。
  • -fno-omit-frame-pointer:编译器默认情况下会尝试省略不必要的帧指针,以优化代码。然而,这会导致使用printf函数时无法正确打印函数调用堆栈。使用该开关选项可以禁止编译器省略帧指针,保证printf函数的正常调用。

示例命令:gcc -fno-builtin -fno-omit-frame-pointer main.c -o output

  1. puts函数: puts函数用于将字符串输出到标准输出(终端窗口)。在使用puts函数时,可以使用以下开关选项:
  • -fno-builtin:禁用内建的puts函数,这将导致编译器在编译时不会做任何优化,并且使用外部的puts库函数。

示例命令:gcc -fno-builtin main.c -o output

总结: GCC编译器提供了开关选项来控制printf和puts函数的编译行为,以达到优化代码执行效率和保证正确调用的目的。这些选项可以根据实际需求进行使用。

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

  • 腾讯云计算服务:https://cloud.tencent.com/product
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云函数计算(SCF):https://cloud.tencent.com/product/scf
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云安全中心:https://cloud.tencent.com/product/ssc
  • 腾讯云内容分发网络(CDN):https://cloud.tencent.com/product/cdn
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发平台(MPS):https://cloud.tencent.com/product/mps
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏多媒体引擎(GME):https://cloud.tencent.com/product/gme
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GCC 编译器使用

要编译出能在 ARM 平台上运行的程序,必须使用交叉编译工具 xxx-gcc、xxx-ld 等(不同版本的编译器的前缀不一样,比如 arm-linux-gcc),下面分别介绍。...本节文档使用 x86 上的 gcc 来试验,使用 ARM 板的交叉编译工具链做实验时效果也是类似的。不同的交叉编译器工具链前缀可能不同,比如 arm-linux-gcc。...(5)-v 显示制作 GCC 工具自身时的配置命令;同时显示编译器驱动程序、预处理器、编译器的版本号。以一个程序为例,它包含三个文件,代码在 02_options 目录下。...不使用‘-O’或’-O1’选项时,只有声明了 register 的变量才分配使用寄存器。 使用了’-O’或‘-O1’选项,编译器会试图减少目标码的大小和执行时间。...如果同时指定了‘-B’选项和 GCC_EXEC_PREFIX 变量,编译器首先使用`-B’选项,然后才尝试环境变量值。

3.8K31
  • GCC编译器基本使用方法

    仅仅是一个编译器,不是IDE,没有界面,只能在命令行下使用。...预处理使用选项“-E”。预处理阶段展开宏,文件包含,条件编译。在正常情形下,GCC不会保留预处理阶段的文件,但是使用-E选项可以保留。例如 ?...这时候你可能会想到使用IDE吧!不使用GCC了。不能一键编译,好蠢,好麻烦。幸运的是,虽然GCC没有自动项目管理工具,但是它提供了Makefile文件来帮助我们提高写程序的效率。...GCC可以使用-O0,-O1,-O2,-O3可以优化程序。O0表示不优化,O3表示优化等级最高。 GCC使用-Wall来打印警告信息,这样有助于调试程序。 GCC使用-w来忽略所有的警告。...GCC使用-g包含调试信息,这在使用gdb调试的时候是必要的。

    1.8K20

    【C 语言】Windows 下使用 gcc 编译器 ( 常用的编译器 | Qt 中的 gcc 编译器 | 独立安装 MinGW )

    文章目录 一、常用的编译器 二、使用 Qt 中的 gcc 编译器 三、独立安装 MinGW 一、常用的编译器 ---- 常用编译器 : MSVC GCC MinGW CLANG ; MSVC : 微软...MicroSoft 的 VC 编译器 , Windows 开发时使用编译器 ; GCC : Linux 中常用的编译器 , 一般嵌入式 , Linux , Android 相关的都使用编译器 ; CLANG...: MAC 中一般使用编译器 ; MinGW : 全称 Minimalist GNU on Windows , Windows 中使用GCC 编译器 ; 二、使用 Qt 中的 gcc 编译器 -..., 涉及到了 MSVC 和 MinGW 两个编译器 , 因此可以在 Qt 的安装目录中找到 MinGW 下的 GCC 编译器 ; 目录 : Qt 根目录\Tools\mingw730_64\bin...将该目录配置到 Path 环境变量中 , 即可在命令行中使用 gcc 编译器 ; 命令行使用 gcc -v 命令验证 ; 三、独立安装 MinGW ---- https://osdn.net/projects

    3.1K50

    Hello World背后的故事:如何在Linux上编译C语言程序

    GCC最初名为GNU C Compiler,当时它只是一款C语言的编译器,不过随着后续迭代,它支持C++、Fortran、Go等语言,GCC也因此成为一个编译器集合。...GCC有以下特点: GCC支持的编程语言多。比如,g++是C++编译器,gfortran是Fortran编译器GCC支持的硬件全。...虽然编译器并非只有GCC一种,macOS上有Clang,Windows上有MSVC,但GCC的这些特点让它从众多编译器间脱颖而出,很多开源软件会选择GCC完成编译工作。...在x86_64架构中,printf()方法在底层是用call puts来实现的,call用来调用一个函数。...虽然这个文件已经是二进制的机器码了,但是它仍然不能执行,因为它缺少系统运行所必须的库,比如C语言printf()对应的汇编语言的puts函数。确切的说,系统还不知道puts函数在内存中的具体位置。

    1.8K11

    【开发环境】Ubuntu 中使用 VSCode 开发 CC++ ② ( 安装 GCC 编译器 )

    文章目录 一、安装 GCC 编译器 可以参考官方提供的文档 : https://code.visualstudio.com/docs/cpp/config-linux 一、安装 GCC 编译器 ----...在 Ubuntu 命令行中 , 执行 gcc -v 命令 , 查询当前的 gcc 编译器 版本 , 如果当前 gcc 编译器已经安装 , 则不需要处理 , 如果 gcc 没有安装 , 则会提示如下内容...-6 command 'gcc-8' from deb gcc-8 command 'gcc-5' from deb gcc-5 command 'gcc-7' from deb gcc-7...Try: sudo apt install octopus@octopus:~$ 此时需要安装 gcc 编译器 , 首先执行 sudo apt-get update 命令..., 更新 apt-get 源 ; 然后 , 执行 sudo apt-get install build-essential gdb 命令 , 安装 gcc 编译器 ; 安装完毕后 , 再次查询 gcc

    48930

    再议 C++ 11 Lambda表达式

    ); return 0; })->next([&](){ puts("|it's boring"); printf("test code is %d\n", ++ test_code...但是对于仿函数,暂时我还没有找到一个跨平台并且兼容所有主流编译器并能在不使用C++ 11的decltype关键字并在编译期对其*operator()()*的返回值不同而产生差异化的完美的方案。...那么不使用decltype要实现这个功能思路就很清晰了,利用type_traits技术或者编译器功能来获取表达式类型。 不使用C++11 decltype关键字的适配方案?...对于GCC和Clang编译器,所幸有个typeof关键字。 对于VC编译器就比较悲剧了,还好VS2010以上版本已经支持decltype。...当可以全线使用C++11特性的时候这些问题都不复存在。但是在现在这个过渡时期,大多生产环境用得都是很低版本的编译器,还不支持C++11的这些特性。

    39420

    linux装载和启动可执行程序的过程

    添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号 保留所有的#pragma编译器指令,因为编译器需要使用它们 编译:gcc -x cpp-output -S -o hello.s hello.cpp...-m32(目标代码) 汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令 链接:gcc -o hello hello.o -m32 (可执行文件) 通过调用链接器ld来链接程序运行需要的一大堆目标文件...(红线为第一次函数调用的顺序,蓝线为后续函数调用的顺序) 下面以puts函数为例分析第一次函数调用的过程: (1)进入puts@plt,执行指令 (2)跳到GOT表中相应位置,此时GOT表里保存的是...从图中可以看出动态链接使用了共享库,接下来查看共享库: ? 通过gdb调试,我们知道printf实际上是调用puts函数: ? 用IDA打开动态链接的hello文件: ?...可以看到已经把puts函数的内容导入到代码段了。 装载和启动过程分析 execve函数调用流程如下: ?

    3.1K40

    C和指针学习

    如果要修改可执行文件的名字可以加-o参数:gcc -o myexec main.c 这样就把main.c编译连接生成的可执行文件命名为myexec gcc编译器的编译自定义格式 #cc -o hello... hello.c #gcc -o hello hello.c 使用gcc 编译器就会为我们生成一个hello的可执行文件  扩充阅读:Linux编译器GCC使用 http://blog.csdn.net...扩充阅读:寄存器register介绍 扩充阅读:变量属性 9.volatile变量 编译器不要对变量优化,每次使用变量,直接从内存调入寄存器操作,然后结果返回内存。...inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。 ...作用一:调试开关

    31620

    逆向工程——栈

    如果叶函数的代码短到用不到几个寄存器,那么它也可能根本不会使用数据栈。所以调用叶函数的时候确实可能不会涉及栈操作。...%d, %d, %d\n", 1, 2, 3); // MSVC #endif puts (buf); } snprint()函数的功能和printf(0函数的功能差不多。...当然printf()函数就足以完成_snprintf()和1puts()两个函数的功能。主要为了演示缓冲区的用法,所以才可以将它拆分为两个函数。...add esp,28 ;000001cH 由于alloca()函数是编译器固有函数,并非常规函数的缘故,这个程序并没有使用栈,而是使用EAX寄存器来传递alloca()函数唯一的参数。...GCC Intel语体 在编译上述代码时,GCC 4.4.1 同样不会调用外部函数 指令清单 5.2 GCC 4.7.3 .LC0: .string "hi!

    87331

    【CC++】C语言特性总结

    gcc编译器  gcc(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。...gcc原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器gcc同样适用于微软的Windows。 ...gcc最初用于编译C语言,随着项目的发展gcc已经成为了能够编译C、C++、Java、Ada、fortran、Object C、Object C++、Go语言的编译器大家族。 ...register指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。....如果使用用户自己定义的函数,而该函数与调用它的函数(即主调函数)不在同一文件中,或者函数定义的位置在主调函数之后,则必须在调用此函数之前对被调用的函数作声明。

    1K00

    【CC++】C语言特性总结

    gcc编译器 gcc(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。...gcc原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器gcc同样适用于微软的Windows。...gcc最初用于编译C语言,随着项目的发展gcc已经成为了能够编译C、C++、Java、Ada、fortran、Object C、Object C++、Go语言的编译器大家族。.... register 指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。...如果使用用户自己定义的函数,而该函数与调用它的函数(即主调函数)不在同一文件中,或者函数定义的位置在主调函数之后,则必须在调用此函数之前对被调用的函数作声明。

    1.2K10

    Linux pwn入门学习到放弃

    FORTIFY_SOURCE设为1,并且将编译器设置为优化1(gcc -O1),以及出现上述情形,那么程序编译时就会进行检查但又不会改变程序功能 开启命令如下: gcc -o test test.c...特别像某些头文件 #include )_FORTIFY_SOURCE设为1,并且将编译器设置为优化1(gcc -O1),以及出现上述情形,那么程序编译时就会进行检查但又不会改变程序功能...= puts_addr - offset 然后利用二进制基址算出二进制自带的 printf 真实地址,再次利用格式化字符漏洞实现任意地址读写。...# 我们首先create字符串调用delete 此时freeshort地址变成了printf,可以控制打印 #step 4 get printf func addr printf_plt...(0x20,payload) # 继续调用 free -> puts delete(1) #this one can not be ignore because DynELF use the

    3.6K10

    程序一定要从main函数开始运行吗?

    源代码: int main() { printf("程序喵\n"); return 0; } gcc -c test objdump -r test.o test.o: file...注意:我们代码里明明用的是printf,为什么它却引用了puts的符号呢,因为编译器默认情况下会把只用一个字符串参数的printf替换成puts, 可以节省格式解析的时间,使用-fno-builtin会关闭这个内置函数优化选项...编译器的编译选项是: -ffunction-sections -fdata-sections 可能很多人都会以为程序都是由main函数开始执行和结束的,但其实不是,在main函数调用之前,为了保证程序可以顺利进行...Linux一般程序的入口是__start函数,程序有两个相关的段: init段:进程的初始化代码,一个程序开始运行时,在main函数调用之前,会先运行.init段中的代码。...如何指定程序入口 在ld链接过程中使用-e参数可以指定程序入口,由于一段简短的printf函数其实都依赖了好多个链接库,我们也不太方便使用链接脚本将目标文件与所有这些依赖库进行链接,所以使用下面这段内嵌汇编的程序来打印一段字符串

    1.2K30

    【C语言系列】C语言编译流程分析

    hello.c源代码如下: #include int main() { printf(“Hello, world....\n”); return 0; } 通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,默认生成可执行文件a.out 其实编译(包括链接)的命令:gcc hello.c 可分解为如下4...保留所有的#pragma编译器指令,因为编译器需要使用它们 通常使用以下命令来进行预处理: gcc -E hello.c -o hello.i 参数-E表示只进行预处理 或者也可以使用以下指令完成预处理过程...gcc其实是后台程序的一些包装,根据不同参数去调用其他的实际处理程序,比如:预编译编译程序cc1、汇编器as、连接器ld 可以看到编译后的汇编代码(hello.s)如下: .file "hello.c...链接(Linking) 通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件。

    10.9K51
    领券