C語(yǔ)言初級(jí)階段8——預(yù)處理
預(yù)定義符號(hào)
1.概念:預(yù)處理是編譯之前做的一些事。
2.常用的預(yù)定義符號(hào):
注意::
(1)-(4)的格式占位符都用%是,如:printf("%s",DATE);
(1)-(5)的宏定義的前后分別有兩個(gè)'_',而不是一個(gè)下劃線。
(1)__FILE__當(dāng)前編譯的文件名。
(2)__FUNCTION__當(dāng)前所在函數(shù)。
(3)__DATE__當(dāng)前編譯日期。
(4)__TIME__當(dāng)前編譯時(shí)間。
(5)__LINE__當(dāng)前行數(shù)。格式占位符用%d,如printf("%d",LINE);
(6)_CRT_SECURE_NO_WARNINGS關(guān)閉安全檢查。
#include<stdio.h>
int main()
{
printf("%s\n", __FILE__);
printf("%s\n", __FUNCTION__);
printf("%s\n", __DATE__);
printf("%s\n", __TIME__);
printf("%D\n", __LINE__);
return 0;
}
宏定義:又稱(chēng)為宏替換,自定義一個(gè)宏(要符合標(biāo)識(shí)符的命名規(guī)則),用于替換任意數(shù)據(jù)、標(biāo)識(shí)符或者表達(dá)式。(本質(zhì):替換)
1.無(wú)參宏定義:
定義無(wú)參宏定義的基本格式:#define 宏名 宏替換
不能給宏定義常量賦值
一改全改
#include<stdio.h>
#define A 4+3
int main()
{
int a = A;
printf("%d\n", a);
return 0;
}
2.含參宏定義
定義含參宏定義的基本格式:#define 宏名(參數(shù)列表) 內(nèi)容。
類(lèi)似一個(gè)函數(shù),含參宏的參數(shù)是沒(méi)有類(lèi)型的,含參宏沒(méi)有返回值。
#include<stdio.h>
#define FUN(a,b) {printf("%d\t%d\n",a,b);printf("%d\n",a+b);}
int main()
{
FUN(10, 10);
return 0;
}
#include<stdio.h>
#define FUN(a,b) {printf("%lf\t%lf\n",a,b);printf("%lf\n",a+b);}
int main()
{
FUN(1.1,1.2);
return 0;
}
#include<stdio.h>
#define F(a,b) a+b
#define F1(a,b) a*b
int main()
{
printf("%d\n", F(1, 2));
printf("%d\n", F(1 + 2, 2 + 1));
printf("%d\n", F1(1 + 2, 2 + 1));//因?yàn)榘補(bǔ)替換成了1+2,把b替換成了2+1,所以結(jié)果是1+2*2+1=6
printf("%d\n", F1((1 + 2), (2 + 1)));//這個(gè)就為:(1+2)*(2+1)=9
printf("%d\n", F1(F(2, 1), F(1, 2)));//這個(gè)是2+1*1+2=5
return 0;
}
常量的定義
格式:const int a=10;
注意:常量必須初始化,并且不允許被修改。
#include<stdio.h>
const int a = 10;//a的值不可修改
int main()
{
int b = 10;
b = 20;
printf("%d\n", b);
return 0;
}
文件包含
1.概念:想要用庫(kù)函數(shù)就需要包含頭文件,也就是文件包含,當(dāng)然也可以編寫(xiě)自定義頭文件,包含自己編寫(xiě)的頭文件。
2.基本格式:#include<文件名>或#include"文件名"
(1)包含系統(tǒng)頭文件用<>,只會(huì)在系統(tǒng)頭文件中去找。
(2)包含自定義頭文件用"",在自定義頭文件中找不到就會(huì)在系統(tǒng)文件中去找。
3.文件包含允許嵌套,即在一個(gè)被包含文件中可以包含其他文件。
4.頭文件嵌套可能會(huì)引起頭文件的重復(fù)包含,從而出現(xiàn)函數(shù)和變量的重定義問(wèn)題,所以需要避免頭文件重復(fù)包含,某些宏定義語(yǔ)句可以防止頭文件重復(fù)包含
pragma once
//防止頭文件重復(fù)包含,不讓文件的內(nèi)容被包含兩次,在頭文件最前面添加。
pragma once是VS獨(dú)有的,有使用平臺(tái)限制,其他平臺(tái)可能不存在。
#include<stdio.h>
#include<stdlib.h>
#include "string.h"
#include"tool.h"http://自定義頭文件一般用""去引用,系統(tǒng)自帶的一般是用<>引用
int main()
{
fun();
return 0;
}
#pragma once
#ifndef __TOLL_H__
#define __TOOL_H__
//頭文件不定義函數(shù),只聲明函數(shù),相當(dāng)于一個(gè)功能。
#include<stdio.h>
void fun();
#endif
#include<stdio.h>
void fun()
{
printf("11111");
}
條件編譯:根據(jù)不同的條件編譯不同的代碼
#include<stdio.h>
int main()
{
#if 1
printf("111111\n");
printf("111111\n");
#else
printf("222222\n");
printf("222222\n");
#endif
#ifdef A
printf("555555\n");
#else
printf("444444\n");
#endif
return 0;
}
#include<stdio.h>
int main()
{
#define A 3
#if 1
printf("111111\n");
printf("111111\n");
#else
printf("222222\n");
printf("222222\n");
#endif
#ifdef A
printf("555555\n");
#else
printf("444444\n");
#endif
return 0;
}
#include<stdio.h>
#define A 3
int main()
{
#ifdef A
printf("555555\n");
#else
printf("444444\n");
#endif
#ifndef A
printf("555555\n");
#else
printf("444444\n");
#endif
return 0;
}
浙公網(wǎng)安備 33010602011771號(hào)