程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++條件編譯

C++條件編譯

編輯:C++入門知識

條件編譯:
一般情況下,源程序中所有的行都參加編譯。但有時希望對其中一部分內容只在滿足一定條件下才進行編譯,即對一部分內容指定編譯條件,這就是“條件編譯”(conditional compile)。

常用形式:

條件編譯命令常用的有以下形式:

(1)

        #ifdef 標識符

            程序段1

       #else

           程序段2

       #endif

它的作用是當所指定的標識符已經被#define命令定義過,則在程序編譯階段只編譯程序段1,否則只編譯程序段2。#endif用來限定#ifdef命令的范圍。其中,#else部分也可以沒有。

(2)


        #ifndef 標識符

            程序段1

       #else

           程序段2

       #endif

它的作用是當所指定的標識符沒有被#define命令定義過,則在程序編譯階段只編譯程序段1,否則只編譯程序段2。這種形式與第一種形式的作用相反。

(3)


        #if 表達式


            程序段1

       #else

           程序段2

       #endif

它的作用是當所指定的標識符值為真(非零)時,則在程序編譯階段只編譯程序段1,否則只編譯程序段2。可以事先給定一定條件,使程序在不同的條件下執行不同的功能。

例子:
題目:輸入一個字母字符,使之條件編譯,使之能根據需要將小寫字母轉化為大寫字母輸出,或將大寫字母轉化為小寫字母輸出。

代碼1

[cpp]
#include<iostream>  
using namespace std; 
#define upper 1  
int main(){ 
    char a; 
    #if upper   
    cout<<"lowercase to uppercase"<<endl; 
    cout<<"please input a char:"; 
    cin>>a; 
    if(a>='a'&&a<='z'){ 
       cout<<a<<"===>"<<char(a-32)<<endl; 
    }else{ 
        cout<<"data erroe"<<endl; 
    } 
    #else  
    cout<<"uppercase to lowercase"<<endl; 
    cout<<"please input a char:"; 
    cin>>a; 
    if(a>='A'&&a<='Z'){ 
        cout<<a<<"===>"<<char(a+32)<<endl; 
    }else{ 
        cout<<"data erroe"<<endl;    
    } 
    #endif  
    cout<<"Good Night~"<<endl; 
    return 0; 

#include<iostream>
using namespace std;
#define upper 1
int main(){
 char a;
 #if upper
    cout<<"lowercase to uppercase"<<endl;
    cout<<"please input a char:";
    cin>>a;
 if(a>='a'&&a<='z'){
    cout<<a<<"===>"<<char(a-32)<<endl;
 }else{
  cout<<"data erroe"<<endl;
 }
 #else
 cout<<"uppercase to lowercase"<<endl;
    cout<<"please input a char:";
 cin>>a;
 if(a>='A'&&a<='Z'){
  cout<<a<<"===>"<<char(a+32)<<endl;
 }else{
  cout<<"data erroe"<<endl; 
 }
 #endif
 cout<<"Good Night~"<<endl;
 return 0;
}
 

 
\


代碼2:

[cpp]
#include<iostream>  
using namespace std; 
#define upper 0  
int main(){ 
    char a; 
    #if upper   
    cout<<"lowercase to uppercase"<<endl; 
    cout<<"please input a char:"; 
    cin>>a; 
    if(a>='a'&&a<='z'){ 
       cout<<a<<"===>"<<char(a-32)<<endl; 
    }else{ 
        cout<<"data erroe"<<endl; 
    } 
    #else  
    cout<<"uppercase to lowercase"<<endl; 
    cout<<"please input a char:"; 
    cin>>a; 
    if(a>='A'&&a<='Z'){ 
        cout<<a<<"===>"<<char(a+32)<<endl; 
    }else{ 
        cout<<"data erroe"<<endl;    
    } 
    #endif  
    cout<<"Good Night~"<<endl; 
    return 0; 

#include<iostream>
using namespace std;
#define upper 0
int main(){
 char a;
 #if upper
    cout<<"lowercase to uppercase"<<endl;
    cout<<"please input a char:";
    cin>>a;
 if(a>='a'&&a<='z'){
    cout<<a<<"===>"<<char(a-32)<<endl;
 }else{
  cout<<"data erroe"<<endl;
 }
 #else
 cout<<"uppercase to lowercase"<<endl;
    cout<<"please input a char:";
 cin>>a;
 if(a>='A'&&a<='Z'){
  cout<<a<<"===>"<<char(a+32)<<endl;
 }else{
  cout<<"data erroe"<<endl; 
 }
 #endif
 cout<<"Good Night~"<<endl;
 return 0;
}
 

 
\


分析:
代碼1和代碼2的區別是upper的值分別是1和0,運行結果也證明了分別編譯了語句段1和語句段2。
[cpp]
cout<<"Good Night~"<<endl; 

 cout<<"Good Night~"<<endl;這個語句是在#endif之後的語句,這說明#endif只是表示了#if——#else語句的結束,而不是編譯的結束,也就是說#endif之後的語句都會正常的編譯和執行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved