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ù)處理器的基本概念和常用指令

CHANBAEK ? 來源:南山府嵌入式 ? 作者:編外人員 ? 2023-04-13 16:11 ? 次閱讀

簡(jiǎn)介

嵌入式系統(tǒng)開發(fā)中,C預(yù)處理器是非常重要的一部分,可以在編譯之前對(duì)源代碼進(jìn)行宏替換、條件編譯和包含等處理。 在本文中,我們將介紹嵌入式C預(yù)處理器的基本概念和常用指令。

#define

宏定義是C預(yù)處理器最常用的指令之一。 通過宏定義,可以將一段代碼片段替換為一個(gè)標(biāo)識(shí)符。 例如,下面的代碼定義了一個(gè)宏,將數(shù)字5替換為標(biāo)識(shí)符MAX:

1#define MAX 5

宏定義還可以帶參數(shù),例如,下面的代碼定義了一個(gè)帶參數(shù)的宏,將兩個(gè)數(shù)相加:

1 #define ADD(x, y) ((x) + (y))

在使用帶參數(shù)的宏時(shí),需要使用括號(hào)來保證優(yōu)先級(jí)

1int a = 2, b = 3;
2int c = ADD(a, b); // c = 5

條件編譯

條件編譯是指根據(jù)不同的條件編譯不同的代碼。 在嵌入式系統(tǒng)開發(fā)中,經(jīng)常需要根據(jù)不同的平臺(tái)或者編譯器進(jìn)行編譯,或者在不同的環(huán)境中使用不同的代碼。 條件編譯可以通過以下指令實(shí)現(xiàn):

1#if condition
2    code
3#elif condition
4    code
5#else
6    code
7#endif

#include

#include指令用于包含頭文件。 頭文件通常包含函數(shù)原型、宏定義等信息。 例如,包含stdio.h頭文件

1#include

#undef

#undef指令用于取消宏定義。 例如,取消前面定義的“PI”宏:

1 #undef PI

這樣,編譯器在編譯時(shí)就不再將所有出現(xiàn)的"PI"

#ifdef、#ifndef、#endif

#ifdef指令用于檢查宏是否已經(jīng)定義。 例如,如果已經(jīng)定義了宏“DEBUG”,則編譯以下代碼:

1#ifdef DEBUG
2    printf("Debugging information:\\n");
3#endif

#ifndef指令與#ifdef相反,這兩個(gè)指令通常與#endif指令一起使用。 用于檢查宏是否沒有被定義。 例如,如果宏“DEBUG”沒有被定義,則編譯以下代碼:

1#ifndef DEBUG
2    printf("No debugging information available.\\n");
3#endif

#if、#elif、#else、#endif

#if指令用于條件編譯。 例如,編譯以下代碼,如果x等于1,則編譯“printf(”x is 1.\\n“)”代碼:

1#if x == 1
2    printf("x is 1.\\n");
3#elif x == 2
4    printf("x is 2.\\n");
5#else
6    printf("x is neither 1 nor 2.\\n");
7#endif

#pragma

#pragma指令用于向編譯器發(fā)出特定的指示,例如優(yōu)化選項(xiàng)、警告選項(xiàng)等等。 例如,告訴編譯器關(guān)閉警告:這樣就可以關(guān)閉4018警告。

1#pragma warning(disable: 4018)
1#pragma pack(push, 1) // 設(shè)置內(nèi)存對(duì)齊方式為1字節(jié)
2struct mystruct {
3    int a;
4    char b;
5    short c;
6};
7#pragma pack(pop) // 恢復(fù)默認(rèn)的內(nèi)存對(duì)齊方式

#line:

設(shè)置當(dāng)前行號(hào)和文件名

1#line 42 "myheader.h" // 設(shè)置當(dāng)前行號(hào)為42,文件名為myheader.h

#error:

輸出錯(cuò)誤信息并終止編譯

1#if MAX_BUFFER_SIZE > 1024
2    #error "Buffer size too large."
3#endif

#FILE、#LINE、#DATE、#TIME:

預(yù)定義的宏

1printf("File: %s, Line: %d\\n", __FILE__, __LINE__); // 輸出當(dāng)前文件名和行號(hào)
2printf("Compile time: %s %s\\n", __DATE__, __TIME__); // 輸出編譯時(shí)間
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19100

    瀏覽量

    228813
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    302010
  • 指令
    +關(guān)注

    關(guān)注

    1

    文章

    606

    瀏覽量

    35617
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1617

    瀏覽量

    49015
  • 宏定義
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    8996
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【下載】《嵌入式C編程與Atmel AVR》

    對(duì)Atmel AVR RISC處理器的介紹,讀者會(huì)立即進(jìn)入嵌入式C語言教程之中。在本書中,讀者將學(xué)習(xí)C語言的變量和常量、運(yùn)算符和表達(dá)式、控制語句、指針和數(shù)組、存儲(chǔ)
    發(fā)表于 01-31 18:06

    嵌入式系統(tǒng)基本概念概述

    文章目錄嵌入式系統(tǒng)概述基本概念嵌入式系統(tǒng)的發(fā)展發(fā)展歷史發(fā)展趨勢(shì)組成結(jié)構(gòu)設(shè)備驅(qū)動(dòng)層硬件抽象層HAL板級(jí)支持包BSP設(shè)備驅(qū)動(dòng)程序?qū)崟r(shí)操作系統(tǒng)RTOSOS的應(yīng)用程序接口API應(yīng)用程序APP嵌入式
    發(fā)表于 07-16 08:15

    嵌入式基本概念及其應(yīng)用

    文章目錄系統(tǒng)移植概述及環(huán)境搭建嵌入式基本概念嵌入式系統(tǒng)的應(yīng)用領(lǐng)域什么是嵌入式系統(tǒng)用嵌入式系統(tǒng)硬件組成部分通用
    發(fā)表于 10-27 07:59

    嵌入式系統(tǒng)常用指令集有哪些

    嵌入式系統(tǒng)常用指令集表格整理一、ARM處理器指令集二、ARM匯編語言ARM處理器專場(chǎng)(以下所有表
    發(fā)表于 10-27 07:53

    嵌入式Linux開發(fā)的基本概念

    嵌入式Linux開發(fā)前,你可能需要知道這些基本概念 作者之前編寫了一系列嵌入式Linux的開發(fā)文檔: 關(guān)注公眾號(hào)【微聯(lián)智控】,并回復(fù)【嵌入式Linux資料】,可獲取以上pdf文檔?的下
    發(fā)表于 11-04 08:05

    嵌入式系統(tǒng)的基本概念及特點(diǎn)

    嵌入式系統(tǒng)概述基本概念由來發(fā)展歷史分類及特點(diǎn)基本概念由來發(fā)展歷史分類及特點(diǎn)
    發(fā)表于 11-08 09:13

    嵌入式處理器的分類

    1.簡(jiǎn)介. ARM 是一個(gè)CPU內(nèi)核. ARM是"Advanced RISC Machine"的縮寫. ARM處理器本身是32位設(shè)計(jì),但也配備16位指令嵌入式處理器
    發(fā)表于 11-09 07:08

    嵌入式軟件的基本構(gòu)成以及功能

    1:嵌入式系統(tǒng)的基本概念。嵌入式軟件的基本構(gòu)成以及功能;能畫出簡(jiǎn)單的嵌入式系統(tǒng)設(shè)計(jì)框圖,舉例說明嵌入式應(yīng)用。
    發(fā)表于 12-14 08:30

    調(diào)試嵌入式處理器常用的方法有哪些?

    調(diào)試嵌入式處理器常用的方法有哪些?
    發(fā)表于 12-24 06:08

    調(diào)試嵌入式處理器的幾種常用方法

    調(diào)試嵌入式處理器的幾種常用方法 前言 在任何產(chǎn)品
    發(fā)表于 03-11 12:25 ?1587次閱讀
    調(diào)試<b class='flag-5'>嵌入式</b><b class='flag-5'>處理器</b>的幾種<b class='flag-5'>常用</b>方法

    嵌入式系統(tǒng)基本概念(硬件篇)

    標(biāo)題嵌入式系統(tǒng)基本概念學(xué)習(xí)(一)嵌入式系統(tǒng): 硬件子系統(tǒng)、軟件子系統(tǒng)。硬件子系統(tǒng)包括:嵌入式處理器、存儲(chǔ)
    發(fā)表于 10-20 17:06 ?17次下載
    <b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>基本概念</b>(硬件篇)

    嵌入式處理器

      嵌入式處理器嵌入式系統(tǒng)的核心,是控制、輔助系統(tǒng)運(yùn)行的硬件單元。范圍極其廣闊,從最初的4位處理器,目前仍在大規(guī)模應(yīng)用的8位單片機(jī),到最新的受到廣泛青睞的32位,64位
    發(fā)表于 10-20 17:21 ?1次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>處理器</b>

    嵌入式系統(tǒng)常用指令集表格整理

    嵌入式系統(tǒng)常用指令集表格整理一、ARM處理器指令集二、ARM匯編語言ARM處理器專場(chǎng)(以下所有表
    發(fā)表于 10-20 17:51 ?4次下載
    <b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>常用</b><b class='flag-5'>指令</b>集表格整理

    介紹嵌入式C預(yù)處理器基本概念常用指令

    嵌入式系統(tǒng)開發(fā)中,C預(yù)處理器是非常重要的一部分,可以在編譯之前對(duì)源代碼進(jìn)行宏替換、條件編譯和包含等處理。
    發(fā)表于 05-20 15:14 ?467次閱讀

    嵌入式微處理器的原理和應(yīng)用

    嵌入式微處理器是專為嵌入式系統(tǒng)設(shè)計(jì)的微處理器,它們是嵌入式系統(tǒng)的核心組件,負(fù)責(zé)執(zhí)行程序指令、處理
    的頭像 發(fā)表于 03-28 15:51 ?793次閱讀