美文网首页
c语言宏

c语言宏

作者: hehehehe | 来源:发表于2023-04-02 16:08 被阅读0次

    https://blog.csdn.net/qq_28576837/article/details/125091757
    C 语言提供的预处理功能有三种,分别为宏定义、文件包含和条件编译

    宏定义

    #define 标识符 字符串
    

    #表示这是一条预处理命令(在C语言中凡是以#开头的均为预处理命令)
    define:宏定义命令
    标识符:所定义的宏名
    字符串:可以是常数、表达式、格式串等

    // 不带参数的宏定义
    #define MAX 10
     
    /*带参宏定义*/
    #define M(y) (((y)*(y))+(3*(y)))
     
    /*宏调用*/
    k=M(MAX);
    
    #define HELLO "hello \
    the world"
    

    条件编译

    #if、#elif、#else 和 #endif 都是预处理命令

    #ifdef 可以认为是 #if defined 的缩写。 
    #if 后面跟的是“整型常量表达式”,
    而 #ifdef 和 #ifndef 后面跟的只能是一个宏名,不能是其他的。

    if 命令
    image.png
    ifdef 命令
    image.png
    #include <stdio.h>
    #include <stdarg.h>
    
    void Printlnf(const char *format, ...) {
      va_list args;
          va_start(args, format);
      vprintf(format, args);
      printf("\n");
          va_end(args);
    }
    
    // "Hello ""world" ==> "Hello world"
    // __FILE__
    // __LINE__
    // __FUNCTION__
    // (../05.printlnf.c:20) main :
    
    #define PRINTLNF(format, ...) printf("("__FILE__":%d) %s : "format"\n",__LINE__, __FUNCTION__, ##__VA_ARGS__)
    
    #define PRINT_INT(value) PRINTLNF(#value": %d", value)
    
    int main() {
    
      int value = 2;
      Printlnf("Hello World! %d", value);
      PRINTLNF("Hello World! %d", value);
      PRINTLNF("Hello World!");
    
      PRINT_INT(value); // value: 2
      int x = 3;
      PRINT_INT(x);
    
      PRINT_INT(3 + 4);
      return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:c语言宏

          本文链接:https://www.haomeiwen.com/subject/oqsrddtx.html