日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言----预处理

發布時間:2025/3/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言----预处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

c語言----預處理

    • 不帶參數的宏
    • 帶參數的宏
  • 頭文件
  • 條件編譯
    • #if 命令
    • #else 與#elif
    • #ifdef及#ifndef命令
  • #progma命令
  • 預定義宏名

不帶參數的宏

宏定義指令#define 用來定義一個標識符和一個字符串,以這個標識符來代表這個字符串,在程序中每次遇到該標識符時就用所定義的字符串替換它。它的作用相當于給指定的字符串起一個別名。

不帶參數的宏的一般形式如下

#define 宏名 字符串
  • "#"表示這是一條預處理命令。
  • 宏名是一個標識符,必須符合C語言標識符的定義。
  • 字符串可以是整數,表達式,格式字符串等。
  • 宏定義用于預處理命令,它不同于定義的變量,只做字符替換,不分配內存

例如:

#define PI 3.14159

它的作用是在程序中用PI替代3.14159 ,在編譯預處理時,每當在源程序中遇到PI時將自動轉換為3.14159

  • 可以用 #undef命令來終止宏定義的作用域。

帶參數的宏

帶參數的宏不僅是簡單的字符替換,還可以進行參數替換。一般形式如下:

#define 宏名(參數表) 字符串 //參數表里的參數叫實參,字符串中為形參。

例如:對兩個數實現乘法和加法的混合運算。

#include<stdio.h> #define MIX(a,b) ((a)*(b)+(b))void main(){ int x = 5,y = 9; printf("%d\n",MIN(x,y)) return 0; }
  • 用宏替換函數的好處:是宏替換增加了代碼的執行速度,因為不存在函數調用。但是也由于重復編碼而增加了程序的長度。
  • 對于帶參數的宏有以下幾點需要注意:

    1.宏定義時參數要加括號,若不加括號,有時結果對有時錯。

  • 宏擴展必須使用括號來保護表達式中低優先級的操作符,以便確保得到想要的結果。
  • 對帶參數的宏的展開只是將語句中的宏后面括號內的實參字符串代替#define命令行中的形參。
  • 在宏定義時,宏名與帶參數的括號之間不可以以加空格,否則將空格以后的字符串都作為替換字符串的一部分。
  • 在帶參數的宏中,形式參數不分配內存單元,因此不必做類型定義。
  • 頭文件

    一般情況下將以下內容放到.h文件中:

    • 宏定義。
    • 結構體、聯合和枚舉聲明。
    • typedef 聲明。
    • 外部函數聲明。
    • 全局變量聲明。

    使用頭文件有以下幾點需要注意:

  • 文件包含是可以嵌套的,即在一個被包含文件中還可以包含另一個被包含文件。
  • 當file1.h 中包含file2.h,預編譯后就成為一個文件而不是兩個文件,這是如果file2.h中有全局靜態變量,則該變量在file1.h中也有用,不需要再用extern聲明。
  • 條件編譯

    #if 命令

    #if的基本含義是,如果#if命令后的參數表達式為真,則編譯#if到#endif之間的程序段,否則跳過這段程序。#endif命令用來表示#if段的結束。

    一般格式如下:

    #if 常數表達式語句段 # endif
    • 如果常數表達式為真,則這段程序會編譯,否則跳過。

    例如:

    #include<stdio.h> #define NUM 50 void main(){int i = 0;#if NUM>50 i++;#endif#if NUM==50i = i+50;#endifprintf("%d\n",i); return 0; }

    #else 與#elif

    • #else:的作用是當#if為假時提供另一種選擇,作用和條件判斷中的else相似。
    • #elif:用來建立一種 “如果…或者如果…”的形式。

    #ifdef及#ifndef命令

    在#if條件編譯命令中,需要判斷符號常量所定義的具體值,但有時并不需要判斷具體值,只需要知道這個符號常量是否被定義了,這時就需要采用另一種條件編譯的方法,即#ifdef與#ifndef命令,它們分別表示“如果有定義”和“如果無定義”。

    #ifdef命令的一般形式:

    #ifdef 宏替換名 語句段 #endif

    其意義是:如果宏替換名已經被定義過,則對“語句段”進行編譯。

    #ifndef命令的一般形式:

    #ifndef 宏替換名 語句段 #endif

    其意義是:如果宏替換名沒有被定義過,則對“語句段”進行編譯。

    #progma命令

    #progma命令的作用是設定編譯器的狀態,或者指示編譯器完成一些特定的動作。

    一般形式如下:

    #progma 參數

    參數可以是以下幾種情況:

    • message參數:該參數能夠在編譯信息輸出窗口中輸出相應的信息。
    • code_seg參數:設置程序中函數代碼存放的代碼段。
    • once參數:保證頭文件被編譯一次。

    預定義宏名

    ANS標準說明了5個預定義宏替換名

    • **_LINE_**:其含義是當前被編譯代碼的行號。
    • _FILE_:其含義是當前源程序的文件名稱
    • _DATE_:其含義是當前源程序的創建日期
    • _TIME_:其含義是當前源程序的創建時間
    • _STDC_:其含義是用來判斷當前編譯器是否為標準C,其值為1表示符合,否則不是。

    總結

    以上是生活随笔為你收集整理的c语言----预处理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。