_WIN32
,Linux 有专有的宏__linux__
,以现有的知识,我们很容易就想到了 if else,请看下面的代码:
#include <stdio.h> int main(){ if(_WIN32){ system("color 0c"); printf("http://task.lmcjl.com\n"); }else if(__linux__){ printf("\033[22;31mhttp://task.lmcjl.com\n\033[22;30m"); }else{ printf("http://task.lmcjl.com\n"); } return 0; }但这段代码是错误的,在 Windows 下提示 __linux__ 是未定义的标识符,在 Linux 下提示 _Win32 是未定义的标识符。对上面的代码进行改进:
#include <stdio.h> int main(){ #if _WIN32 system("color 0c"); printf("http://task.lmcjl.com\n"); #elif __linux__ printf("\033[22;31mhttp://task.lmcjl.com\n\033[22;30m"); #else printf("http://task.lmcjl.com\n"); #endif return 0; }#if、#elif、#else 和 #endif 都是预处理命令,整段代码的意思是:如果宏 _WIN32 的值为真,就保留第 4、5 行代码,删除第 7、9 行代码;如果宏 __linux__ 的值为真,就保留第 7 行代码;如果所有的宏都为假,就保留第 9 行代码。
#if 整型常量表达式1
程序段1
#elif 整型常量表达式2
程序段2
#elif 整型常量表达式3
程序段3
#else
程序段4
#endif
#include <stdio.h> int main(){ #if _WIN32 printf("This is Windows!\n"); #else printf("Unknown platform!\n"); #endif #if __linux__ printf("This is Linux!\n"); #endif return 0; }
#ifdef 宏名
程序段1
#else
程序段2
#endif
#ifdef 宏名
程序段
#endif
#include <stdio.h> #include <stdlib.h> int main(){ #ifdef _DEBUG printf("正在使用 Debug 模式编译程序...\n"); #else printf("正在使用 Release 模式编译程序...\n"); #endif system("pause"); return 0; }当以 Debug 模式编译程序时,宏 _DEBUG 会被定义,预处器会保留第 5 行代码,删除第 7 行代码。反之会删除第 5 行,保留第 7 行。
#ifndef 宏名
程序段1
#else
程序段2
#endif
#include <stdio.h> #define NUM 10 int main(){ #if NUM == 10 || NUM == 20 printf("NUM: %d\n", NUM); #else printf("NUM Error\n"); #endif return 0; }运行结果:
#include <stdio.h> #define NUM1 10 #define NUM2 20 int main(){ #if (defined NUM1 && defined NUM2) //代码A printf("NUM1: %d, NUM2: %d\n", NUM1, NUM2); #else //代码B printf("Error\n"); #endif return 0; }运行结果:
本文链接:http://task.lmcjl.com/news/7637.html