C++中的前置處理器

來源:互聯網
上載者:User

C++的前置處理器包括如下12個。

#if         #else      #elif         #endif       #ifdef      #ifndef     #undef

#error    #line      #pragma   #include    #define 

第一行7個就是控制語句,重點在後面5個。

 

1. #define 

#define macro-name char-sequence 

#define定義了一個標識符和一個字元序列。每次在來源程式中遇到該標識符就用定義的字元序列替代它。

標識符被即宏名;替換過程即宏替換。  

#define ONE 1
#define TWO ONE + ONE
#define PI 3.14
#define ERRMSG "ERR!!!"
//.......
printf(ERRMSG);

宏定義中如果字元序列超過一行,可以在末尾用反斜線續行

#define LONGSTRING "this is a very very \
                    very very.......\
                    long string"

宏名不一定要大些,但C++程式員大都習慣用大些字母。並且習慣常將所有的宏集中在一或多個單獨的標頭檔中。 

宏名可以有變元。遇到宏名時,其定義中所用的變元均由實際程式中的變元來代替。這一點很像inline函數。但define的對象,編譯器只是做簡單的字元替換,其他動作例如類型檢查。應盡量使用inline來代替define。

#include <stdio.h>
#define ABS(a) (a)<0? -(a) :(a)  // 這裡的括弧很重要

int main(void)
{
  printf("abs of -1 and 1: %d %d", ABS(-1), ABS(1));
  return 0; 
}

  

#error

#error error-message // error message不用雙引號括起來

 #error主要用在調試中,強迫編譯器停止編譯 。錯誤資訊會隨編譯的其他資訊一同顯示。

 

#include

#include <xx.h>  //使用編譯器建立者定義的方式尋找
                 //通常是從項目定義的眾多包含目錄下開始
#include "xx.h"  //使用其他實現所定義的方式尋找
                 //通常是從當前工作目錄開始,
                 //如未找到,則按<>的規定繼續尋找

 

#line 

#line number "filename"

用來改變__LINE__和__FILE__的內容。這兩個標識符是編譯器中預先定義的標識符。 

前者表示已編譯的程式碼數,後者是一字串,包含已編譯的源檔案名稱。 

number為__LINE__的新值,filename為任意有效檔案名稱標識符,是__FILE__ 的新值。

 

#pragma

#pragma是一個實現時定義的指令,用它向編譯器傳送各種指令。例如

#pragma once

  

#和##前置處理器運算子

#和##與#define一起使用。

#,stringize運算子,使它後面的變元轉換成帶引號的串。 

#include <stdio.h>
#define mkstr(s) #s
int main(void)
{
  //I like C++ 就是mkstr宏中的s,
  //前置處理器將這一大串加上引號變成"I like C++"
  printf(mkstr(I like C++)); 
  return 0 ;
}

##,pasting運算子,用於串連兩個符號。 

#include <stdio.h>
#define concat(a,b) a##b
int main(void)
{
  int xy = 10;
  printf("%d", concat(x,y)); //前置處理器將其變成列印xy的值
  return 0 ;
}

 

預定義的宏名

__LINE__      __FILE__    __DATE__     __TIME__    __STDC__    __cplusplus

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.