热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

Linux下GCC的于处理器CPP使用实例

[root@localhostansi]#cpp-dMdevnull查看GCC内部自定义的宏第一:通过使用宏去掉注释[root@localhostansi]#vimdtest.c#includestdio.hintmain(void){#ifdefTESTprintf(Testmode\n);#endifprintf(Tuning......\n);return0;}1

 [root@localhost ansi]# cpp -dM /dev/null  //查看GCC内部自定义的宏

第一:通过使用宏去掉注释

[root@localhost ansi]# vim dtest.c

 

#include

 

int main(void)

{

#ifdef TEST

        printf("Test mode\n");

#endif

        printf("Tuning......\n");

        return 0;

}

1、使用宏(拿掉#if 0 …………#end if的注释)

[root@localhost ansi]# gcc -Wall -O -DTEST dtest.c -o dt

[root@localhost ansi]# ./dt

Test mode

Tuning......2、不使用宏

[root@localhost ansi]# gcc -Wall -O dtest.c -o wanyan

[root@localhost ansi]# ./wanyan

Tuning......

第二:通过宏实现赋值

[root@localhost ansi]# vim num.c

 

#include

 

int main(void)

{

        printf("Value of NUM is %d\n",NUM);

        return 0;

}

1、只写-D默认的值为1(正确)

[root@localhost ansi]# gcc -Wall -O -DNUM num.c -o num

[root@localhost ansi]# ./num

Value of NUM is 1

2、给D赋值(正确)

[root@localhost ansi]# gcc -Wall -O -DNUM=123 num.c -o wanyan

[root@localhost ansi]# ./wanyan

Value of NUM is 123

3、不写-D(错误)

[root@localhost ansi]# gcc -Wall -O num.c -o ethnicitybeta

num.c: In function 'main':

num.c:5: error: 'NUM' undeclared (first use in this function)

num.c:5: error: (Each undeclared identifier is reported only once

num.c:5: error: for each function it appears in.)

第三:编译的过程(模拟),过程.c(原始代码部分)-->.i(预处理的部分)-->.s(汇编语言部分)-->.o(包含机器码的部分,目标文件)-->可执行的文件

[root@localhost test]# vim bad.c

 

#include

 

int main(void)

{

        printf("2 plus 2 is %d\n",4);

        return 0;

}

~   

下边这个步骤就是为了保存预处理的结果文件 

[root@localhost test]# gcc -Wall -O -c -save-temps bad.c   //重点在-save-temps的使用

[root@localhost test]# ls

bad.c  bad.i  bad.o  bad.s

第四:GCC ?E来查看过程(并不是真正的编译)

[root@localhost test]# vim bad.c

 

#include

 

int main(void)

{

        printf("2 plus 2 is %d\n",4);

        return 0;

}

 

[root@localhost test]# gcc -E bad.c

………..

…………

………..

extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__));

# 844 "/usr/include/stdio.h" 3 4

 

# 2 "bad.c" 2

 

int main(void)

{

 printf("2 plus 2 is %d\n",4);

 return 0;

}

实验结束

总结:这篇文章是对小布老师视频学习的一个笔记,这个主要是GNU C的预处理功能模块CPP的应用,包括宏的使用和查看编译过程。

 


推荐阅读
  • 1.tarzxfapache-activemq-5.12.0-bin.tar.gztarzxfapache-activemq-5.12.0-bin.tar.gz2.cdapac ... [详细]
  • 在 Mac 上配置 NDK
    本文详细介绍了如何在 Mac 上配置 Android NDK,包括设置环境变量和解决常见问题的方法。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 如何正确删除软链接:专业指南与操作步骤
    本文将详细介绍如何正确删除软链接,提供专业的操作指南和步骤。首先,我们将创建一个示例文件夹和文件,以便演示具体的操作过程。通过 `mkdir test_chk` 创建一个名为 `test_chk` 的文件夹,然后使用 `touch test_chk/test.txt` 命令在该文件夹中生成一个空文件 `test.txt`。接下来,我们将逐步讲解如何安全地删除软链接,确保不会对原始文件造成影响。 ... [详细]
  • 本文详细介绍了VIM的基础操作和常用快捷键,VIM作为Unix及类Unix系统中的一款经典文本编辑器,源自VI的改进与发展。其简洁的界面和强大的扩展性使其在开发者中备受青睐,同时也催生了多个适用于Windows平台的版本。通过图文并茂的方式,帮助读者快速掌握VIM的核心功能与使用技巧。 ... [详细]
  • Hadoop平台警告解决:无法加载本机Hadoop库的全面应对方案
    本文探讨了在Hadoop平台上遇到“无法加载本机Hadoop库”警告的多种解决方案。首先,通过修改日志配置文件来忽略该警告,这一方法被证明是有效的。其次,尝试指定本地库的路径,但未能解决问题。接着,尝试不使用Hadoop本地库,同样没有效果。然后,通过替换现有的Hadoop本地库,成功解决了问题。最后,根据Hadoop的源代码自行编译本地库,也达到了预期的效果。以上方法适用于macOS系统。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • Linux基础知识:Vi与Vim编辑器详解
    Linux基础知识:Vi与Vim编辑器详解 ... [详细]
  • 对于希望在未越狱的iOS设备上修改Hosts文件的苹果用户来说,了解文件的具体位置和操作步骤至关重要。本文将详细介绍如何通过安装最新版本的iTunes来实现这一目标,并提供实用的操作指南,帮助用户轻松完成Hosts文件的编辑。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在开发过程中,为了确保代码的实时保存,我们常常会对某个功能进行多次提交。然而,当功能趋于稳定时,将这些分散的提交记录合并为一次提交,可以提高代码仓库的整洁度和可维护性。本文将详细介绍如何使用 Git 巧妙地合并多次提交记录,帮助开发者简化历史记录管理。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
author-avatar
一截藏青线
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有