c语言宏

2023-04-02  本文已影响0人  hehehehe

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;
}

上一篇下一篇

猜你喜欢

热点阅读