zoukankan      html  css  js  c++  java
  • 预处理

    宏定义:

      不带参数的宏:

      定义宏的结构 #define 宏名 字符串 

      #define PI 3.1415926 //使用 PI 代替了3.1415926

    如:

    #define u "hello world"
    int main(int argc, char *argv[]) {
    printf(u);
    return 0;
    }

    运行结果

    若宏定义的内容在字符串内,则不进行替换

    如:

    #include <stdio.h>
    #include <stdlib.h>
    #define Char "this is an example"
    int main(int argc, char *argv[]) {
    char str[30] = "Char is ?";
    printf("%s ",str);//打印出的结果并未进行替换
    return 0;
    }

    运行结果

    带参数的宏

    如:

    #include <stdio.h>
    #include <stdlib.h>
    #define math(a,b) a+b*b 
    int main(int argc, char *argv[]) {
    int x = 1,y = 2;
    printf("%d",math(x,y));
    return 0;
    }

    运行结果

    #include <stdio.h>
    #include <stdlib.h>
    #define math(a,b) (a+b)*b
    int main(int argc, char *argv[]) {
    int x = 1,y = 2;
    printf("%d",math(x,y));
    return 0;
    }

    运行结果

    条件编译

    格式:#if  常数表达式    

                    语句段     //如果条件为真,则该段被编译,否则跳过此段

              #endif

     如:

    #include <stdio.h>
    #include <stdlib.h>
    #define NUM 50
    int main(int argc, char *argv[]) {
    int i = 0;
    #if NUM>50
    i++;
    #endif

    #if NUM == 50
    i = i+50;
    #endif

    #if NUM<50
    i--;
    #endif

    printf("%d",i);
    return 0;
    }

    运行结果

    #include <stdio.h>
    #include <stdlib.h>
    #define NUM 10 
    int main(int argc, char *argv[]) {
    int i = 0;
    #if NUM>50
    i++;
    #endif

    #if NUM == 50
    i = i+50;
    #endif

    #if NUM<50
    i--;
    #endif

    printf("%d",i);
    return 0;
    }

    运行结果

    #include <stdio.h>
    #include <stdlib.h>
    #define NUM 50
    int main(int argc, char *argv[]) {
    int i = 0;
    #if NUM > 50
    i++;
    #else
    #if NUM < 50
    i--;
    #else
    i = i+50;
    #endif
    #endif
    printf("%d",i);
    return 0;
    }

    运行结果

    #include <stdio.h>
    #include <stdlib.h>
    #define NUM 100
    int main(int argc, char *argv[])
    {
    int i = 0;
    #if NUM > 50
    i++;
    #elif NUM == 50
    i = i+50;
    #else
    i--;
    #endif
    printf("%d",i);
    return 0;
    }

    #line命令 __LINE__存放当前编译的行号,__FILE__存放当前编译的文件名,两个关键字的前后都是两个下划线,

    格式

    #line 行号["文件名"]

    例如:

    __LINE__

    #line 22"123.c" //从22开始相加到执行编译的行数
    #include <stdio.h>  //从这行开始起计数为 0
    #include <stdlib.h>  //第1行
                         //第2行
                       //第3行
    int main() {       //第4行
        printf("1当前行号:%d ",__LINE__);//第5行
        printf("3当前行号:%d ",__LINE__);//第6行
        return 0;
    }
    运行结果

    __FILE__

     #line 22"123.c"
    #include <stdio.h>  
    #include <stdlib.h>                 
    int main() {      
        printf("1当前行号:%s ",__FILE__);//当前编译的文件
        printf("3当前行号:%s ",__FILE__);//当前编译的文件
        return 0;
    }

    运行结果

  • 相关阅读:
    什么是守护线程?
    如何优雅地停止一个线程?
    如何创建、启动 Java 线程?
    什么是线程?什么是进程?为什么要有线程?有什么关系与区别?
    并行是什么意思?与并发的区别是什么?
    并发编程的缺点?
    BZOJ_3058_四叶草魔杖_kruscal+状压DP
    BZOJ_3476_[Usaco2014 Mar]The Lazy Cow_扫描线+切比雪夫距离
    BZOJ_1511_[POI2006]OKR-Periods of Words_KMP
    BZOJ_3479_[Usaco2014 Mar]Watering the Fields_Prim
  • 原文地址:https://www.cnblogs.com/2277098974-qqcom/p/8143336.html
Copyright © 2011-2022 走看看