注冊 登錄
Office中國論壇/Access中國論壇 返回首頁

ganlinlao的個人空間 http://m.mzhfr.cn/?230471 [收藏] [復(fù)制] [分享] [RSS]

日志

Freebasic菜鳥初學(xué)Freebasic基礎(chǔ)教程四:了解條件編譯

已有 2752 次閱讀2017-5-8 18:25 |個人分類:FreeBasic| Freebasic教程, freebasic入門, Freebasic

這種能夠根據(jù)不同情況編譯不同代碼、產(chǎn)生不同目標文件的機制,稱為條件編譯。條件編譯是預(yù)處理程序的功能,不是編譯器的功能。

 條件編譯有多種形式,下面一一講解。

#if 命令
#if 命令的完整格式為:
#if 整型常量表達式1
     程序段1
 #elseif 整型常量表達式2
     程序段2
 #elseif 整型常量表達式3
     程序段3
 #else
     程序段4
 #endif
它的意思是:如常“表達式1”的值為真(非0),就對“程序段1”進行編譯,否則就計算“表達式2”,結(jié)果為真的話就對“程序段2”進行編譯,為假的話就繼續(xù)往下匹配,直到遇到值為真的表達式,或者遇到 #else。這一點和 if else 非常類似。

 需要注意的是,#if 命令要求判斷條件為“整型常量表達式”,也就是說,表達式中不能包含變量,而且結(jié)果必須是整數(shù);而 if 后面的表達式?jīng)]有限制,只要符合語法就行。這是 #if 和 if 的一個重要區(qū)別。

#elseif 和 #else 也可以省略,如下所示:

    #if __FB_WIN32__
        print "This is Windows!\n"
    #else
       print("Unknown platform!\n"
    #endif
   
    #if __FB_LINUX__
        printf("This is Linux!\n");
    #endif

#ifdef 命令

#ifdef 命令的格式為:
#ifdef  宏名
    程序段1
 #else
     程序段2
 #endif
它的意思是,如果當前的宏已被定義過,則對“程序段1”進行編譯,否則對“程序段2”進行編譯。

 也可以省略 #else:
#ifdef  宏名
    程序段
#endif

   #ifdef __fb_debug__

      print  "正在使用 Debug 模式編譯程序..."
    #else
        print"正在使用 Release 模式編譯程序..."
    #endif

當以 Debug 模式編譯程序時,宏 _DEBUG 會被定義,預(yù)處器會保留第 5 行代碼,刪除第 7 行代碼。反之會刪除第 5 行,保留第 7 行。

#ifndef 命令
#ifndef 命令的格式為:
#ifndef 宏名
    程序段1
 #else
     程序段2
 #endif
與 #ifdef 相比,僅僅是將 #ifdef 改為了 #ifndef。它的意思是,如果當前的宏未被定義,則對“程序段1”進行編譯,否則對“程序段2”進行編譯,這與 #ifdef 的功能正好相反。
區(qū)別
最后需要注意的是,#if 后面跟的是“整型常量表達式”,而 #ifdef 和 #ifndef 后面跟的只能是一個宏名,不能是其他的。

 例如,下面的形式只能用于 #if:

#define NUM 10
   #if NUM = 10 or NUM = 20
        print "NUM: " & NUM
    #else
       print "NUM Error"
    #EndIf
    
運行結(jié)果:
NUM: 10

再如,兩個宏都存在時編譯代碼A,否則編譯代碼B:
#define NUM1  10
#define NUM2  20
   #if  Defined(NUM1) And  Defined(NUM2)
     Print  "NUM1:" & NUM1 & Chr(10) & "NUM2: "& NUM2
    #else
       print "Error"
   #EndIf  
   sleep
運行結(jié)果:
NUM1: 10, NUM2: 20

 #ifdef 可以認為是 #if defined 的縮寫。

評論 (0 個評論)

facelist doodle 涂鴉板

您需要登錄后才可以評論 登錄 | 注冊

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-13 03:03 , Processed in 0.071555 second(s), 17 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部