欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言-預(yù)處理(#define、#if...)

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 10:13 ? 次閱讀

1. 區(qū)分預(yù)處理代碼

C語(yǔ)言程序里,出現(xiàn)的#開(kāi)頭的代碼段都屬于預(yù)處理。

預(yù)處理:是在程序編譯階段就執(zhí)行的代碼段。

比如: 包含頭文件的的代碼

#include 
#include 
#include 

下面列出C語(yǔ)言里常用的預(yù)處理代碼段:

指令 描述
#define 定義宏
#include 包含一個(gè)源代碼文件
#undef 取消已定義的宏
#ifdef 如果宏已經(jīng)定義,則返回真
#ifndef 如果宏沒(méi)有定義,則返回真
#if 如果給定條件為真,則編譯下面代碼 #if (a==12)||(11==12)
#else #if 的替代方案
#elif 如果前面的 #if 給定條件不為真,當(dāng)前條件為真,則編譯下面代碼 #if 1==2 #define ABC “123” #elif 2==2 #define ABC “456” #elif 3==3 #define ABC “789” #endif
#endif 結(jié)束一個(gè) #if……#else 條件編譯塊
#error 當(dāng)遇到標(biāo)準(zhǔn)錯(cuò)誤時(shí),輸出錯(cuò)誤消息
#pragma 使用標(biāo)準(zhǔn)化方法,向編譯器發(fā)布特殊的命令到編譯器中

2. #define 預(yù)處理指令: 宏定義和宏替換

2.1 宏替換基本用法和銜接符號(hào)使用示例

#include 
//C預(yù)處理器只不過(guò)是一個(gè)文本替換工具而已,它們會(huì)指示編譯器在實(shí)際編譯之前完成所需的預(yù)處理

#define STR_DATA "123456"  //宏替換用法

//替換的宏一般都是大寫
//STR_DATA 稱為替換標(biāo)識(shí)符

#define INT_DATA  6666

//帶參宏  
#define  PRINT_DATA(x) if(x){printf("為真.\n");} \
					   else {printf("為假.\n");}

int main(int argc,char **argv)
{
    printf("%s\n",STR_DATA);
	printf("%d\n",INT_DATA);
	
	PRINT_DATA(1);
	PRINT_DATA(0);
	return 0;
}

2.2 宏替換的高級(jí)用法:#(字符串常量替換符號(hào))

#include 

//字符串常量替換
#define PRINT_DATA1(a,b) printf(#a"456"#b"\n");

#define PRINT_DATA2(a,b) printf("%s,%s\n",#a,#b);

int main(int argc,char **argv)
{
	PRINT_DATA1(123,"789");
	PRINT_DATA2(123,"789");
	return 0;
}

2.3 宏替換的高級(jí)用法:##(數(shù)據(jù)拼接符號(hào))

#include 

//數(shù)據(jù)拼接符號(hào)
#define PRINT_DATA1(a,b) printf("%d\n",a##b);

int main(int argc,char **argv)
{
	PRINT_DATA1(1,4);
	PRINT_DATA1(100,400);
	return 0;
}

#include 
//數(shù)據(jù)拼接符號(hào)
#define PRINT_DATA(a) a##a
int main(int argc,char **argv)
{
	printf("%d\n",PRINT_DATA(6));
	return 0;
}

2.4 宏定義用法

#include 

//#define DEF_A

#ifdef DEF_A
	#define STR_DATA "123"
#else
	#define STR_DATA "456"
#endif

int main(int argc,char **argv)
{
	printf("STR_DATA=%s\n",STR_DATA);
	return 0;
}

3. #ifndef、#ifdef 語(yǔ)句

#include 

#define AA
#ifndef AA
#error "你沒(méi)有定義AA標(biāo)識(shí)符"
#endif
#ifdef A1
#define STR_DATA "123"
#elif  12==12
#define STR_DATA "456"
#elif  34==45 
#define STR_DATA "789"
#else
#define STR_DATA "ABC"
#endif

int main(int argc,char **argv)
{
	printf("%s\n",STR_DATA);
	return 0;
}

4. defined 預(yù)編譯語(yǔ)句

#if 0

#include 

//常規(guī)的常量替換
#define A1 "1234"
#define A2 6666

/*帶參宏*/
#define MAX(a,b) ((a)>(b)?(a):(b))
#define A3(a) if(a){printf("為真.\n");} \
              else {printf("為假.\n");}

//替換字符串常量 #
#define PRINTF_1(a) printf("%s\n",#a);
#define PRINTF_2(a,b) printf(#a"456"#b"\n"); //"123456789"

//數(shù)據(jù)拼接符號(hào)  ##
#define PRINTF_3(a,b) printf("%d\n",a##b); //1234

int main(int argc,char **argv)
{
    printf("%s\n",A1);
    printf("%d\n",A2);

    printf("MAX=%d\n",MAX(12,77));
    A3(1);
    PRINTF_1(1234);
    PRINTF_2(123,789);
    PRINTF_3(12,34);
    return 0;
}
#endif

#if 0
#include 

/*
#if 0
  //為真的時(shí)候執(zhí)行
  int data=123;
#else
  //為假的時(shí)候執(zhí)行
   int data=666;
#endif
*/

#define B1  //定義一個(gè)標(biāo)識(shí)符 B1
#undef B1   //取消標(biāo)識(shí)符B1定義

#ifdef B1
  //為真的時(shí)候執(zhí)行
  int data=123;
#else
  //為假的時(shí)候執(zhí)行
   int data=666;
#endif

int main(int argc,char *argv[])
{
    printf("data=%d\n",data);
    return 0;
}
#endif

#include 

#define A3

#if !defined(A1) &&  !defined(A2) && !defined(A3)
#error "沒(méi)有定義 A1或者A2或者A3"
#endif

int main(int argc,char *argv[])
{
    return 0;
}

5. #include 預(yù)編譯語(yǔ)句

#include 
#include "./include_file/app.h"
//#include "/mnt/hgfs/linux-share-dir/linux_c/include_file/app.h"  

/* 
#include 語(yǔ)法:  <>  和 ""

#include   告訴編譯器,從系統(tǒng)的目錄下尋找stdio.h 這個(gè)文件。
#include "stdio.h"  告訴編譯器,從當(dāng)前用戶目錄下尋找stdio.h 這個(gè)文件,如果找不到再?gòu)南到y(tǒng)的目錄下尋找。

#include "./include_file/app.h"   告訴編譯器,從./include_file目錄下尋找頭文件
#include "include_file/app.h"  
#include "/mnt/hgfs/linux-share-dir/linux_c/include_file/app.h"  
*/

int main(int argc,char *argv[])
{
    printf("%s\n",A1);
    return 0;
}

6. typedef 關(guān)鍵字

typedef 給類型取別名。

比如:

#include 
void func1(void);
void func2(void);

#if 0
//宏替換
#define u8 unsigned char
#define u16 unsigned short
#define u32 unsigned int
#endif

#if 1
//聲明一種新類型
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;

//聲明新數(shù)據(jù)類型: 函數(shù)指針類型:   類型名稱 func_p
typedef void (*func_p)(void);

//定義一個(gè)存放函數(shù)地址的數(shù)組
func_p func_addr[10]={func1,func2};

//聲明新數(shù)據(jù)類型: 類型abc
typedef char abc[10];

#endif

int main(int argc,char **argv)
{
    u8 a;
    abc a1,a2;
    //通過(guò)數(shù)組調(diào)用函數(shù)
    func_addr[0]();
    func_addr[1]();

    printf("%d\n",sizeof(a1));
    printf("%d\n",sizeof(a2));
    return 0;
}

void func1(void)
{
    printf("123\n");
}
void func2(void)
{
    printf("456\n");
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137780
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4830

    瀏覽量

    69094
  • 預(yù)處理
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    10514
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言預(yù)處理

    編譯預(yù)處理器是C語(yǔ)言編譯器的一個(gè)重要組成部分。很好的利用C語(yǔ)言預(yù)處理命令可以增強(qiáng)代碼的可讀性,
    發(fā)表于 06-03 17:23

    c語(yǔ)言預(yù)處理命令以什么開(kāi)頭

    c語(yǔ)言預(yù)處理命令以什么開(kāi)頭,目前我并沒(méi)有windows軟件編寫經(jīng)驗(yàn),對(duì)C語(yǔ)言的應(yīng)用也僅限于各種單片機(jī)的編程,所以對(duì)
    發(fā)表于 07-20 07:00

    STM32 C語(yǔ)言預(yù)處理解析

    /1170799353. C語(yǔ)言預(yù)處理詳解 https://blog.csdn.net/czc1997/article/details/810794984. #define宏定義的優(yōu)點(diǎn)
    發(fā)表于 07-22 09:03

    LED流水燈C語(yǔ)言常用預(yù)處理命令

    LED流水燈C語(yǔ)言常用預(yù)處理命令 宏定義#define使用:#define 新名稱 原內(nèi)容(不加分號(hào))//對(duì)同一個(gè)內(nèi)容,宏定義只能定義一次循
    發(fā)表于 01-19 06:53

    C語(yǔ)言預(yù)處理指令有何功能

    C語(yǔ)言預(yù)處理指令有何功能?C語(yǔ)言預(yù)處理指令有哪些要求呢?
    發(fā)表于 02-25 07:20

    C語(yǔ)言預(yù)處理命令有哪些?

    不止。先看幾個(gè)個(gè)常識(shí)性問(wèn)題: A) 預(yù)處理C 語(yǔ)言的一部分嗎? B) 包含“#”號(hào)的都是預(yù)處理嗎? C)
    發(fā)表于 06-25 06:15

    C語(yǔ)言的編譯預(yù)處理

    在將一個(gè)C源程序轉(zhuǎn)換為可執(zhí)行程序的過(guò)程中, 編譯預(yù)處理是最初的步驟. 這一步驟是由預(yù)處理器(preprocessor)來(lái)完成的. 在源流程序被編譯器處理之前,
    發(fā)表于 09-20 18:17 ?47次下載

    基于51單片機(jī)--C語(yǔ)言預(yù)處理總結(jié)

    編譯預(yù)處理器是C語(yǔ)言編譯器的一個(gè)重要組成部分。很好的利用C語(yǔ)言預(yù)處理命令可以增強(qiáng)代碼的可讀性,
    發(fā)表于 08-17 10:48 ?1104次閱讀

    C語(yǔ)言教程之C語(yǔ)言中級(jí)培訓(xùn)教程—預(yù)處理電子課件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言教程之C語(yǔ)言中級(jí)培訓(xùn)教程—預(yù)處理電子課件免費(fèi)下載
    發(fā)表于 09-04 17:11 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>教程之<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>中級(jí)培訓(xùn)教程—<b class='flag-5'>預(yù)處理</b>電子課件免費(fèi)下載

    C語(yǔ)言預(yù)處理命令的分類和工作原理詳細(xì)說(shuō)明

    C 語(yǔ)言編程過(guò)程中,經(jīng)常會(huì)用到如 #include、#define 等指令,這些標(biāo)識(shí)開(kāi)頭的指令被稱為預(yù)處理指令,預(yù)處理指令由
    發(fā)表于 11-25 10:34 ?18次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>預(yù)處理</b>命令的分類和工作原理詳細(xì)說(shuō)明

    C語(yǔ)言預(yù)處理指令及分類

    C/C++ 程序中的源代碼中包含以 # 開(kāi)頭的各種編譯指令,這些指令稱為預(yù)處理指令。預(yù)處理指令不屬于 C/
    的頭像 發(fā)表于 11-29 10:14 ?2322次閱讀

    C語(yǔ)言預(yù)處理命令是什么

    我們?cè)趯?b class='flag-5'>C語(yǔ)言程序時(shí)經(jīng)常使用庫(kù)函數(shù)之前,應(yīng)該用`#include`引入對(duì)應(yīng)的頭文件。這種以`#`號(hào)開(kāi)頭的命令稱為預(yù)處理命令。
    的頭像 發(fā)表于 02-17 13:59 ?2809次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>預(yù)處理</b>命令是什么

    C/C++預(yù)處理命令的工作原理及分類

    摘要:在C/C++語(yǔ)言編程過(guò)程中,經(jīng)常會(huì)用到如#include、#define等指令,同時(shí)也會(huì)涉及到大量的預(yù)處理與條件編譯,這樣做的好處可以
    的頭像 發(fā)表于 04-15 11:32 ?1005次閱讀

    C語(yǔ)言有哪些預(yù)處理操作?

    C語(yǔ)言預(yù)處理是在編譯之前對(duì)源代碼進(jìn)行處理的階段,它主要由預(yù)處理器完成。預(yù)處理器是一個(gè)獨(dú)立的程序
    的頭像 發(fā)表于 12-08 15:40 ?681次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>有哪些<b class='flag-5'>預(yù)處理</b>操作?

    C語(yǔ)言#define的應(yīng)用

    C/C++ 編程語(yǔ)言中,當(dāng)程序被編譯時(shí),被發(fā)送到編譯器,編譯器將程序轉(zhuǎn)換為機(jī)器語(yǔ)言,然后完成編譯并執(zhí)行該程序。預(yù)處理器也稱為宏
    發(fā)表于 03-06 11:29 ?432次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>#<b class='flag-5'>define</b>的應(yīng)用