当前位置: 首页 > news >正文

Day 7:条件编译

GCC编译器

预处理阶段:

        1.gcc - E +  文件名 :预处理文件

        2.gcc - o  + 文件名 :重命名

        gcc -E gcc.c gcc-o gcc.i:生成预处理文件。

        vi gcc.i:

        作用:展开头文件,宏进行替换。 

编译阶段:

gcc - S gcc.i -o gcc.s

        作用:检查语法错误。

汇编

链接

GCC常用选项

-I

        main.c文件:

        file.c文件:

        file.h:

        把以上三个文件一起进行编译:

        把file.h移到include目录里:再次执行发现找不到file.h

        解决方法:gcc main.c file.c -I include

条件编译

        概念:C语言源程序中的每一行代码都要参加编译。但有时候出于对程序代码优化的考虑,希望只对其中一部分内容进行编译,此时就需要在程序中加上条件,让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就是条件编译。

        使用:

#include<stdio.h>
#define _DEBUG_
int main()
{
#ifdef _DEBUG_//如果没有定义过_DEBUG_printf("*******x86*******\n");
#endif _DEBUG_printf("*****************\n");return 0;
}
//*******x86*******
//*****************
#include<stdio.h>
int main()
{
#ifndef _DEBUG_//如果没有定义过_DEBUG_printf("*******x86*******\n");
#else		   //如果定义过_DEBUG_printf("*****************\n");
#endif _DEBUG_return 0;
}
//*******x86*******
//*****************

#include<stdio.h>
#define VALUE  0
int main()
{
#if VALUEprintf("-----------\n");
#elseprintf("xxxxxxxxxxx\n");	
#endifreturn 0;
}
//xxxxxxxxxxx

GCC编译时进行条件编译

        把上述的define去掉,怎么实现功能,使用 - D传递参数。

        文件名 -D _DEBUG_

        文件名 -D VALUE = 1

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 公务员面试(c语言)
  • ISO C++ 和 GNU C++ 的区别
  • MFC工控项目实例之十添加系统测试对话框
  • 苹果笔记本电脑能不能玩游戏?苹果电脑玩游戏咋样?
  • 谷歌账号被停用了怎么申诉?申诉了好多天没有收到回复怎么办?申诉了很多次都被拒了怎么办?只有一个办法
  • FPGA(Field-Programmable Gate Array,现场可编程门阵列)开发入门
  • 如何获取高质量的网站反向链接?
  • TCP与UDP对比
  • 阿里云云盘手动扩展方法
  • xss-labs通关攻略 11-15关
  • Rust 中 `madvise` 和 `posix_fadvise`的区别
  • 华为OD机试真题 - 多段数据压缩(Java/Python/JS/C/C++ 2024 D卷 100分)
  • Django+Vue农产品销售系统的设计与实现
  • 《探讨——关于三层架构前在前端项目的应用》第一版
  • 百望云携手春秋航空 迈入航空出行数电票新时代
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • CSS实用技巧
  • express + mock 让前后台并行开发
  • interface和setter,getter
  • Java 内存分配及垃圾回收机制初探
  • js作用域和this的理解
  • Octave 入门
  • Python进阶细节
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 理清楚Vue的结构
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 山寨一个 Promise
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • ###项目技术发展史
  • #stm32驱动外设模块总结w5500模块
  • (1)(1.11) SiK Radio v2(一)
  • (C++17) optional的使用
  • (二)换源+apt-get基础配置+搜狗拼音
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (回溯) LeetCode 46. 全排列
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (力扣)1314.矩阵区域和
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一) storm的集群安装与配置
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ***通过什么方式***网吧
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET建议使用的大小写命名原则
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net专家(张羿专栏)
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [AIGC] HashMap的扩容与缩容:动态调整容量以提高性能
  • [Android] Binder 里的 Service 和 Interface 分别是什么