#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條件編譯塊 |