#include<stdio.h> //说明:在Windows操做系统和Linux操做系统下,生成源码不同 #incLude<windows.h> int main(){ Sleep(5000); puts("hello ,尚硅谷"); getchar(); rerurn 0; } #if_WIN32 //若是是windows平台,就执行#include<windows.h> #include<windows.h> #elif_linux_//不然判断是否是linux,若是是linux就引入<unistd.h> #include<unistd.h> #endif int main(){ //不一样的平台调用不一样的函数 #if_WIN32 Sleep(5000); #elif_linux_ sleep(5); #endif puts("hello,尚硅谷"); getchar(); return 0; }
#define N 100 int main(){ int sum = 20 + N; printf("%d",sum); getchar(); return 0; } //说明 //#define N 100就是宏定义,N为宏名,100是宏的内容(宏所表示的字符串),在预处理阶段,对程序中全部出现的宏名,预处理器都会用宏定义中的字符串去代换,这称为宏替换或宏展开 //宏定义是由源程序中的宏定义命令#define完成的,宏替换啊是由预处理程序完成的
#include <stdio.h> //宏定义,宏名 M ,对应的字符串(n*n+3*n) //注意:若是宏对应的字符串有(),那么就不能省略 #define M (n*n+3*n) int main(){ int sum,n; printf("Input a number:"); scanf("%d",&n); sum = 3*M+4*M+5*M; printf("sum=%d",sum); getchar(); getchar(); return 0; }
#define PI 3.14159 int main(){ printf("PI=%f",PI); return 0; } #undef PI //取消宏定义 void func(){ printf("PI=%f",PI);
#include<stdio.h> #define OK 100 int main(){ printf("OK"); return 0; }
#define PI 3.1415926 #define S PI*y*y printf("%s",S); //在宏替换后变为 printf("%f",3.1415926*y*y);
#define UINT unsigned int void main(){ UINT a,b; }
#include <stdio.h> //说明 //1.MAX 就是带参数的宏 //2.(a,b)就是形参 //3.(a>b)?a:b是带参数的宏对应字符串,该字符串可使用形参 #define MAX(a,b)?a:b int main(){ int x,y,max; printf("input two numbers:"); scanf("%d %d",&x,&y); //说明 //1.MAX(x,y);调用带参宏定义 //2.在宏替换时(预处理,由预处理器),会进行字符串的替换,同时会使用实参,去替换形参 //3.即MAX(x,y)宏替换后(x>y)?x:y max=MAX(x,y); printf("max=%d",max); getchar(); getcahr(); return 0; }
#define MAX(a,b)(a>b)?a:b //若是写成了#define MAX (a,b)( a>b)?a:b //将被认为是无参宏定义,宏名MAX表明字符串(a,b)(a>b)?a:b //而不是:MAX(a,b) 表明(a:b)?a:b了 )
#include <stdlib.h> #define SQ(y)(y)*(y)//带参宏定义,字符串内的形参一般要用括号括起来以免出错 int main(){ int a,sq; printf("input a number:"); scanf("%d",&a); sq=SQ(a+1); printf("sq=%d",sq); system("pause"); return 0; }
//使用函数计算平均值,使用宏计算平均值,并总结两者的区别 #include<stdio.h> #include<stdlib.h> int SQ(int y){ return ((y)*(y)); } int main(){ int i = 1; while(i<=5){ printf("%d^2=%d",(i-1),SQ(i++)); } system("pause"); return 0; }
#include<stdlib.h> #define SQ(y)((y)*(y)) int main(){ int i=1; while(i<=5){ printf("%d^2=%d",i,SQ(i++)); } system("pause"); return 0; }
预处理指令是以#号开头的代码行,#号必须是该行除了任何空白字符外的第一个字符。#号后是指令关键字,在关键字和#号之间容许存在任意个数的空白字符,整行语句构成了一条预处理指令,该指令将在编译器进行编译以前对源代码作某些转换linux
指令 | 说明 |
---|---|
# | 空指令,无任何效果 |
#include | 包含一个源代码文件 |
#define | 定义宏 |
#undef | 取消已定义的宏 |
#if | 若是给定条件为真,则编译下面代码 |
#ifdef | 若是宏已经定义,则编译下面代码 |
#ifndef | 若是宏没有定义,则编译下面代码 |
#elif | 若是前面的#if给定条件不为真,当前条件为真,则编译下面代码 |
#endif | 结束一个#if...#else条件编译块 |