<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    c/c++ define用法

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接 define,無參宏定義的一般形式為:#define 標識符 字符串 外文名 define 詞條范圍 計算機專業用語 無參一般形式 #define 標識符 字符串 帶參一般形式 #define 宏名(形參表) 字符串

    目錄

    1參數

    2作用

    3宏定義優點

    4無參宏定義

    5帶參宏定義

    6PHP用法

    7例子

    例子 1
    例子 2
       

    1參數編輯

    #define GPEBLT_FUNCNAME(basename) (SCODE (GPE::*)(struct GPEBltParms *))&GPE::##basename 在#define中,標準只定義了#和##兩種操作。#用來把參數轉換成字符串,##則用來連接前后兩個參數,把它們變成一個字符串。 1 2 3 4 5 6 7 8 #include<stdio.h> #define paster(n) printf("token"#n"=%d\n",token##n) int main(vido) { int token9=10; paster(9); return 0; } 輸出為:token 9 = 10 詳見百科typedef(相似)。

    2作用編輯

    被定義為“宏”的標識符稱為“宏名”。在編譯預處理時,對程序中所有出現的“宏名”,都用宏定義中的字符串去代換,這稱為“宏代換”或“宏展開”。宏定義是由源程序中的宏定義命令完成的。宏代換是由預處理程序自動完成的。 宏定義的作用范圍僅限于當前文件,即file1.c中定義 #define PI 3.14,在file2.c中該宏定義不起作用;通過將#define PI 3.14定義在common.h中,file1.c和file2.c分別#include "common.h"的方式,該宏定義在file1.c和file2.c中都起作用。 在C或C++語言中,“宏”分為有參數和無參數兩種。

    3宏定義優點編輯

    (1) 方便程序的修改 使用簡單宏定義可用宏代替一個在程序中經常使用的常量,這樣在將該常量改變時,不用對整個程序進行修改,只修改宏定義的字符串即可,而且當常量比較長時, 我們可以用較短的有意義的標識符來寫程序,這樣更方便一些。我們所說的常量改變不是在程序運行期間改變,而是在編程期間的修改,舉一個大家比較熟悉的例 子,圓周率π是在數學上常用的一個值,有時我們會用3.14來表示,有時也會用3.1415926等,這要看計算所需要的精度,如果我們編制的一個程序中 要多次使用它,那么需要確定一個數值,在本次運行中不改變,但也許后來發現程序所表現的精度有變化,需要改變它的值, 這就需要修改程序中所有的相關數值,這會給我們帶來一定的不便,但如果使用宏定義,使用一個標識符來代替,則在修改時只修改宏定義即可,還可以減少輸入 3.1415926這樣長的數值多次的情況,我們可以如此定義 #define pi 3.1415926,既減少了輸入又便于修改,何樂而不為呢? (2) 提高程序的運行效率 使用帶參數的宏定義可完成函數調用的功能,又能減少系統開銷,提高運行效率。正如C語言中所講,函數的使用可以使程序更加模塊化,便于組織,而且可重復利用,但在發生函數調用時,需要保留調用函數的現場,以便子函數執行結束后能返回繼續執行,同樣在子函數執行完后要恢復調用函數的現場,這都需要一定的時間,如果子函數執行的操作比較多,這種轉換時間開銷可以忽略,但如果子函數完成的功能比較少,甚至于只完成一點操作,如一個乘法語句的操作,則這部分轉換開銷就相對較大了,但使用帶參數的宏定義就不會出現這個問 題,因為它是在預處理階段即進行了宏展開,在執行時不需要轉換,即在當地執行。宏定義可完成簡單的操作,但復雜的操作還是要由函數調用來完成,而且宏定義所占用的目標代碼空間相對較大。所以在使用時要依據具體情況來決定是否使用宏定義。

    4無參宏定義編輯

    無參宏定義的一般形式為:#define 標識符 字符串 其中的“#”表示這是一條預處理命令。凡是以“#”開頭的均為預處理命令。“define”為宏定義命令。“標識符”為所定義的宏名。“字符串”可以是常數、表達式、格式串等。 例如: #define M (a+b) 它的作用是指定標識符M來代替表達式(a+b)。在編寫源程序時,所有的(a+b)都可由M代替,而對源程序作編譯時,將先由預處理程序進行宏代換,即用(a+b)表達式去置換所有的宏名M,然后再進行編譯。 程序1: 1 2 3 4 5 6 7 8 9 10 #include<stdio.h> #define M (a+b) int main(vido) { int s,a,b; printf("inputnumbera&b:"); scanf("%d%d",&a,&b); s = M*M; printf("s=%d\n",s); } 上例程序中首先進行宏定義,定義M來替代表達式(a+b),在 s= M * M 中作了宏調用。在預處理時經宏展開后該語句變為: S=(a+b)*(a+b)  但要注意的是,在宏定義中表達式(a+b)兩邊的括號不能少。否則會發生錯誤。  如當作以下定義后:#define M (a)+(b)  在宏展開時將得到下述語句:S= (a)+(b)*(a)+(b) 對于宏定義還要說明以下幾點: 1.宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一種簡單的代換,字符串中可以含任何字符,可以是常數,也可以是表達式,預處理程序對它不作任何檢查。如有錯誤,只能在編譯已被宏展開后的源程序時發現。 2.宏定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。 3.宏定義其作用域為宏定義命令起到源程序結束。如要終止其作用域可使用#undef命令。  (有關#undef 請查閱其他資料)

    5帶參宏定義編輯

    c語言允許宏帶有參數。在宏定義中的參數稱為形式參數,在宏調用中的參數稱為實際參數。對帶參數的宏,在調用中,不僅要宏展開,而且要用實參去代換形參。 帶參宏定義的一般形式為:  #define 宏名(形參表) 字符串 在字符串中含有各個形參。 帶參宏調用的一般形式為:  宏名(形參表) 例如: 1 2 #defineM(y)((y)*(y)+3*(y))/*宏定義*/ k=M(5);/*宏調用*/ 在宏調用時,用實參5去代替形參y,經預處理宏展開后的語句為:  k=5*5+3*5 程序2: 1 2 3 4 5 6 7 8 9 10 11 12 //#include<cstdio> #include<stdio.h> #define MAX(a,b)((a>b)?(a):(b)) intmain(intargc,char*argv[]) { intx,y,max; printf("inputtwonumbers:"); scanf("%d%d",&x,&y); max=MAX(x,y); printf("max=%d\n",max); return0; } 上例程序的第一行進行帶參宏定義,用宏名MAX表示條件表達式 (a>b)?a:b ,形參a,b均出現在條件表達式中。程序中 max=MAX(x,y) 為宏調用,實參x,y,將代換形參a,b。宏展開后該語句為: max=(x>y)?x:y;  用于計算x,y中的大數。 #define 條件編譯 頭文件(.h)可以被頭文件或C文件包含;重復包含(重復定義)由于頭文件包含可以嵌套,那么C文件就有可能包含多次同一個頭文件,就可能出現重復定義的問題的。 通過條件編譯開關來避免重復包含(重復定義) 例如 1 2 3 4 #ifndef__headerfileXXX__ #define__headerfileXXX__ //文件內容 #endif 詳見百科#typedef(相似)

    6PHP用法編輯

    define() 函數定義一個常量。 常量類似變量,不同之處在于: 在設定以后,常量的值無法更改 常量名不需要開頭的美元符號 ($) 作用域不影響對常量的訪問 常量值只能是字符串或數字

    7例子編輯

    例子 1

    定義一個大小寫敏感的常量: 1 <?phpdefine("GREETING","Helloworld!");echoconstant("GREETING");?> 輸出: Hello world!

    例子 2

    定義一個大小寫不敏感的常量: 1 <?phpdefine("GREETING","Helloworld!",TRUE);echoconstant("greeting");?> 輸出: Hello world! RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全