首页 > 编程语言 >编译预处理程序

编译预处理程序

时间:2024-11-27 16:28:40浏览次数:11  
标签:head 常量 程序 编译 程序段 预处理 表达式 define

1.#include指令

#include<文件名>

在C++安装目录的include子目录下寻找<>中标明的文件,通常叫做按标准方式搜索

#include"文件名"

先在当前目录,即当前工程的目录中寻找""中标明的文件,若没有找到,则按标准方式搜索。

2.#define和#undef指令

#define可以定义符号常量,比如,#define PI 3.14 这条指令定义了一个符号常量PI,它的值是3.14。还可以用来定义宏,来实现简单的参数运算。#define add(x,y) (x+y) 这条指令说明如果我们用到add(1,2)则预处理后就会用(1+2)代替,C++中一般用内联函数来实现。

#undef用来删除#define定义的宏,使其不再起作用。

3.条件编译指令

a.#if  常量表达式        
                程序正文        //当“ 常量表达式”非零时本程序段参与编译
       #endif

b. #if   常量表达式
                 程序正文1       //当“ 常量表达式”非零时本程序段参与编译
      #else
                 程序正文2       //当“ 常量表达式”为零时本程序段参与编译
      #endif

c. #if 常量表达式1
                 程序正文1        //当“ 常量表达式1”非零时本程序段参与编译
       elif 常量表达式2
                程序正文2        //当“常量表达式1”为零、“ 常量表达式2”非零时本程序段参与编译
        ...
       elif 常量表达式n
                程序正文n        //当“常量表达式1”、...、“常量表达式n-1”均为零、“ 常量表达式n”非零时本程序段参与编译
       #else
                程序正文n+1      //其他情况下本程序段参与编译
       #endif

d. #ifdef 标识符
               程序段1
       #else
               程序段2
       #endif

       如果“标识符”经#defined定义过,且未经undef删除,则编译程序段1,否则编译程序段2。

e. #ifndef 标识符
                  程序段1
       #else
                  程序段2
       #endif

       如果“标识符”未被定义过,则编译程序段1,否则编译程序段2。

4.define操作符

define是预处理操作符,不是指令,所以不能用#开头。使用形式为:define(标识符)。如果括号里的标识符用#define定义过,并且没有用#undef删除,则define(标识符)为非0,否则为0。可以这样使用:
        #if !define(HEAD_H)
        #define HEAD_H

在包含头文件的时候有时候会遇到重复包含同一个头文件的情况,例如

    // main.cpp文件
       #include "file1.h"
       #include "file2.h"
       int main()
       {
              …
       }
       // file1.h文件
       #include "head.h"
        …
       // file2.h文件
       #include "head.h"
        …
       // head.h文件
        ...
       class A
       {
              ...
       }
       ...

 main.cpp包含了file1.h文件,file1.h又包含了head.h文件,main.cpp还包含了file2.h文件,file2.h也包含了head.h文件,那么main.cpp就包含了两次head.h文件,在编译时就会报错,说head.h中的类A重复定义了。这时我们可以在被重复包含的文件head.h中使用条件编译指令,用一个唯一的标识符来标识head.h文件是否已经编译过,如果已经编译过则不会重复编译了。

可以改为如下形式:

// head.h文件
       #ifndef HEAD_H
       #define HEAD_H
       ...
       class A
       {
            ...
       }
       ...
       #endif

 在这个改好的head.h文件中,上来会先判断HEAD_H是否被定义过,如果没有被定义过,则head.h文件还没参与过编译,就编译此文件中的源代码,同时定义HEAD_H,标记head.h文件已经参与过编译。如果HEAD_H已经被定义过,则说明此文件已经参与过编译,编译器会跳过本文件左右内容编译其他部分,类A也不会有重复定义的错误了。

标签:head,常量,程序,编译,程序段,预处理,表达式,define
From: https://blog.csdn.net/2301_80174350/article/details/144022158

相关文章

  • AU3 通常指的是 AutoIt v3,这是一种脚本语言和自动化工具,主要用于 Windows 平台上的自
    AU3通常指的是AutoItv3,这是一种脚本语言和自动化工具,主要用于Windows平台上的自动化任务、GUI(图形用户界面)脚本和小型应用程序开发。AutoIt是一种基于简单语法的脚本语言,旨在通过模拟键盘、鼠标和窗口控制来实现自动化操作。以下是AutoItv3的一些基本特点:1. 自动化任......
  • 35 岁程序员面试 21 连挂,惨不忍睹。。。
    大家好,我是R哥。今天和大家聊聊一个神奇的案例:一个211本科毕业的35岁老程序员,面试了21家中大厂,结果无一成功,最后通过我们的辅导,成功拿下了互联网大厂Offer!履历光鲜:屡屡碰壁,惨不忍睹他的情况大概是这样的:211本科,35岁,工作10年+;职级相当于大厂的P6,但近几年基本......
  • node.js毕设旅游景点推荐系统 程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于旅游景点推荐系统的研究,现有研究主要以推荐算法改进、用户体验优化等为主。专门针对集用户、旅游景点、门票订单、旅游线路、酒店信息和酒店预定等......
  • node.js毕设潘龙村数字化综合管理系统 pc 程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于乡村综合管理系统的研究,现有研究主要以宏观的乡村治理或单一功能的乡村信息管理为主,专门针对数字化综合管理系统涵盖如村委、村民、财务信息、财产......
  • 使用 Pyinstaller 打包为 windows exe程序 添加管理员权限的多种方式
    使用Pyinstaller打包为windowsexe程序添加管理员权限的多种方式本文提供几种在使用Pyinstaller打包后,为包体exe提升管理员权限的方式。注意事项:管理员权限的必要性:确保程序确实需要管理员权限,否则用户可能会质疑程序的安全性。数字签名:最好对生成的.exe文件进行数字......
  • 陪玩公众号平台搭建,社区小程序前后端开源,用户界面优化设计
    一、陪玩公众号平台搭建的要点一、需求分析功能需求用户注册登录:支持微信快捷登录,简化流程。陪玩者信息:展示技能、经验、评级及价格,便于筛选。预约功能:自定义时间与地点,满足多样需求。在线支付:支持多种支付方式,保障交易顺畅。服务跟踪:查看预约状态,提升可控感和信任。评价系......
  • SpringBoot长春轨道交通查询管理82k2s 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,站点信息,线路信息,线路定制开题报告内容一、项目背景随着城市化进程的加速,轨道交通在长春市的公共交通体系中占据了越来越重要的地位。然而,现......
  • SpringBoot枣阳市第二人民医院信息管理系统73263 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容;医院管理员,医生,线上挂号,用户,门诊病历,药品信息,就医记录开题报告内容项目名称:SpringBoot枣阳市第二人民医院信息管理系统项目编号:73263一、项......
  • c++ 程序来计算三角形的面积(Program to find area of a triangle)
    给定一个三角形的边,任务是求出该三角形的面积。例如: 输入:a=5,b=7,c=8输出:三角形面积为17.320508输入:a=3,b=4,c=5输出:三角形面积为6.000000方法:可以使用以下公式简单地计算三角形的面积。其中a、b和c是三角形边长, s=(a+b+c)/2 下面是上......
  • java 程序来计算三角形的面积(Program to find area of a triangle)
    给定一个三角形的边,任务是求出该三角形的面积。例如: 输入:a=5,b=7,c=8输出:三角形面积为17.320508输入:a=3,b=4,c=5输出:三角形面积为6.000000方法:可以使用以下公式简单地计算三角形的面积。其中a、b和c是三角形边长, s=(a+b+c)/2 下面是上......