Skip to content

什么是宏? 简而言之, 就是编译器在编译代码之前会替换你的源码, 然后再编译

  • 预定义宏
  • 自定义宏(函数宏)
c
#include <stdio.h>

// 定义宏:
// #define 宏名 宏内容(字符串/数字/函数)
// 主版本号 此版本号 修订号
#define VER_MAJOR 1
#define VER_MINOR 5
#define VER_PATCH 8

// 动态生成版本号数字(使用其他宏动态生成)
#define VER_NUMBER (VER_MAJOR * 100 + VER_MINOR * 10 + VER_PATCH)

// 定义函数宏:
// #define 宏名(参数) 函数宏内容
// 定义函数宏(判断一个值是否是偶数)
#define IS_EVEN(n) (n % 2 == 0)

int main() {
  printf("int max value %d\n", INT_MAX);
  printf("VER_MAJOR = %d\n", VER_MAJOR);
  printf("VER_MINOR = %d\n", VER_MINOR);
  printf("VER_PATCH = %d\n", VER_PATCH);
  printf("VER_NUMBER = %d\n", VER_NUMBER);
  printf("10 IS_EVEN: %d\n", IS_EVEN(10));
  printf("9 IS_EVEN : %d\n", IS_EVEN(9));
}

条件编译

c
#include <stdio.h>

// 实例2: 使用条件编译动态的定义宏
#ifdef _WIN32
  #define OS_NAME "Windows"
#elif defined(__APPLE__) || defined(__MACH__)
  #define OS_NAME "macOS"
#elif defined(__linux__) || defined(linux)
  #define OS_NAME "Linux"
#elif defined(__unix__) || defined(__unix)
  #define OS_NAME "Unix"
#else
  #define OS_NAME "Unknown"
#endif

int main() {
    printf("This program is running on: %s\n", OS_NAME);

// 示例1:基于操作系统选择不同的实现
#ifdef _WIN32
  printf("Windows");
#elif defined(__APPLE__) || defined(__MACH__)
  printf("macOS");
#elif defined(__linux__) || defined(linux)
  printf("Linux");
#elif defined(__unix__) || defined(__unix)
  printf("Unix");
#else
  printf("Unknown");
#endif
}

Released under the MIT License.