C 預處理小結


  預處理功能主要包括宏定義,文件包含,條件編譯三部分。分別對應宏定義命令,文件包含命令,條件編譯命令三部分實現。

  預處理過程讀入源代碼,檢查包含預處理指令的語句和宏定義,並對源代碼進行響應的轉換。預處理過程還會刪除程序中的注釋和多余的空白字符。

預處理指令是以#號開頭的代碼行。#號必須是該行除了任何空白字符外的第一個字符。#后是指令關鍵字,在關鍵字和#號之間允許存在任意個數的空白字符。整行語句構成了一條預處理指令,該指令將在編譯器進行編譯之前對源代碼做某些轉換。
  
 

   指令             用途

         #            空指令,無任何效果

         #include    包含一個源代碼文件

         #define     定義宏

         #undef     取消已定義的宏

         #if          如果給定條件為真,則編譯下面代碼

         #ifdef       如果宏已經定義,則編譯下面代碼

         #ifndef     如果宏沒有定義,則編譯下面代碼

         #elif         如果前面的#if給定條件不為真,當前條件為真,則編譯下面代碼

         #endif      結束一個#if……#else條件編譯塊

         #error      停止編譯並顯示錯誤信息

    #else       略

    #error     指令將使編譯器顯示一條錯誤信息,然后停止編譯。

         #line        指令可以改變編譯器用來指出警告和錯誤信息的文件號和行號。
         #pragma  指令沒有正式的定義。編譯器可以自定義其用途。典型的用法是禁止或允許某些煩人的警告信息。
 
文件包含
  
  在程序中包含頭文件有兩種格式:
        #include <my.h>
        #include "my.h"
l第一種方法是用尖括號把頭文件括起來。這種格式告訴預處理程序在編譯器自帶的或外部庫的頭文件中搜索被包含的頭文件。第二種方法是用雙引號把頭文件括起來。這種格式告訴預處理程序在當前被編譯的應用程序的源代碼文件中搜索被包含的頭文件,如果找不到,再搜索編譯器自帶的頭文件。
    采用兩種不同包含格式的理由在於,編譯器是安裝在公共子目錄下的,而被編譯的應用程序是在它們自己的私有子目錄下的。一個應用程序既包含編譯器提供的公共頭文件,也包含自定義的私有頭文件。采用兩種不同的包含格式使得編譯器能夠在很多頭文件中區別出一組公共的頭文件。     

   貼上有用的代碼:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define SIX 6
#define SEVEN 7
#define Cube(x) (x)*(x)*(x)
#define VERSION "tzs"
#define PASTE(n) "最終勝利者是:"#n
#define NUM(a,b,c) a##b##c
#define STR(a,b,c) a##b##c
#define DEBUG 1

int main()
{
    int i;
    i = SIX + SEVEN;
    printf("i = %d\n",i);
    i = (SIX * SEVEN);
    printf("i = %d\n",i);

    i = Cube(3);
    printf("i = %d\n",i);

    printf("%s",VERSION);
    printf("%s",PASTE(桃子));
    puts(PASTE(yy/));
    puts(PASTE(xx));

    printf("%d\n",NUM(1,2,3));
    //printf("%s\n",STR("aa","bb","cc"));

    #if DEBUG
        printf("Debugging\n");
        printf("Debugging2222\n");
    #endif
        printf("Running\n");
    #if defined DEBUG
        printf("yes\n");
    #endif
    #if !defined JJ
        printf("no JJ\n");
    #endif

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM