宏
什么是宏? 简而言之, 就是编译器在编译代码之前会替换你的源码, 然后再编译
- 预定义宏
- 自定义宏(函数宏)
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
}