zoukankan      html  css  js  c++  java
  • C语言预处理命令

    以#开头的语句称为预处理语句

    #include

    #include<头文件名>  //先从默认目录搜索头文件
    #include"头文件名"  //先从文件所在目录搜索头文件

    #define

    不带参

      #define 宏名 字符串  //以字符串内容代替宏名(展开),可嵌套

    #define PI 3.1415926
    //other code
    double a=PI;    //展开后该行为:double a=3.1415926;

    带参宏

      #define 宏名(形参列表) 字符串  //定义

      宏名(实参列表)  //调用时展开的同时用实参代替形参

    #define ADD(x,y) x+y
    //other code
    ADD(5,6)    //展开后该行为:5+6

    操作符#和##

      #操作符可将参数转为字符串

    #define A(x) #x
    //other code
    A(!@#D"F"AS123);    //展开后该行为:"!@#D"F"AS123"

      ##可将两个参数拼接起来

    #define B(x,y) x##y
    //other code
    int x=B(23,33)     //展开后该行为:int x=2333

      注意:含有#或##的宏命令不支持嵌套。其内的其他宏不会被展开。

      解决方法:加一层转换宏

    #undef

      取消#define

    #if ... #elif ... #else ...#endif

      功能参考if...elseif...else,但判断条件必须为常量表达式,不能为变量

      #if 常量表达式

        代码

      #elif 常量表达式

        代码

      #elif 常量表达式

        代码

      ...

      #else

        代码

      #endif

    #ifdef ... #else ... #endif

      如果宏被定义过就编译其下的代码

      #ifdef 宏名

        代码

      #else

        代码

      #endif

    #ifndef ... #else ... #endif

      如果宏没被定义过就编译其下的代码

      #ifndef 宏名

        代码

      #else

        代码

      #endif

    用宏有风险,装逼需谨慎

  • 相关阅读:
    day5 -常用模块
    day4装饰器-迭代器&&生成器
    h5 canvas 图片上传操作
    Tomcat上传文件报错:returned a response status of 403 Forbidden
    $.each遍历json对象
    Java求字符串中出现次数最多的字符
    线程池原理
    谈谈你对Hibernate的理解
    为什么要用 ORM? 和 JDBC 有何不一样?
    多线程有几种实现方法?同步有几种实现方法?(被问到)
  • 原文地址:https://www.cnblogs.com/Dumblidor/p/6480949.html
Copyright © 2011-2022 走看看