iOS- define巨集定義和const常變數區別
1.define是巨集定義,程式在預處理階段將用define定義的內容進行了替換。因此程式執行時,常量表中並沒有用define定義的常量,系統不為它分配記憶體。
const定義的常量,在程式執行時在常量表中,系統為它分配記憶體。
2.define定義的常量,預處理時只是直接進行了替換。所以編譯時不能進行資料型別檢驗。
const定義的常量,在編譯時進行嚴格的型別檢驗,可以避免出錯。
3.define定義表示式時要注意“邊緣效應”,例如如下定義:
#define N 2+3 //我們預想的N值是5,我們這樣使用N
int a = N/2; //我們預想的a的值是2.5,可實際上a的值是3.5
原因在於在預處理階段,編譯器將 a = N/2處理成了 a = 2+3/2;這就是巨集定義的字串替換的“邊緣效應”因此要如下定義:
#define N (2+3)
const定義表示式沒有上述問題。
const定義的常量叫做常變數原因有二:
const定義常量像變數一樣檢查型別
const可以在任何地方定義常量,編譯器對它的處理過程與變數相似,只是分配記憶體的地方不同
相關推薦
iOS- define巨集定義和const常變數區別
define巨集定義和const常變數區別:1.define是巨集定義,程式在預處理階段將用define定義的內容進行了替換。因此程式執行時,常量表中並沒有用define定義的常量,系統不為它分配記憶體。const定義的常量,在程式執行時在常量表中,系統為它分配記憶體。2.
C程式設計--常量(巨集定義和const關鍵字定義)
說明:(個人總結,有不對之處,還望指正) 常量 常量是固定值,在程式執行期間不會改變。這些固定的值,又叫做字面量。 常量可以是任何的基本資料型別,比如整數常量、浮點常量、字元常量,或字串字面值,也有列舉常量。 常量就像是常規的變數,只不過常量的值在定
巨集定義和函式呼叫的區別
含引數的巨集與函式的區別 ? 巨集替換不佔執行時間,只佔編譯時間;而函式呼叫則佔執行時間(分配單元、保留現場、值傳遞、返回),所以每次執行都要載入所以執行起來比較慢一些。。 ? 定義巨集的時候不要在巨集及其引數之間鍵入空格,因為巨集替換的時候會把你不經意打的空格當作巨集的一部
函式式的巨集定義和普通函式的區別
去華為面試,被問到了這個問題,答了其中一條,面試官很不滿意,回來總結下! 函式式的巨集定義: #define MAX(a,b) ((
iOS開發巨集定義(#define)注意
在開發中常用#define來記錄各種數值,一般情況下是沒有問題的,但是當巨集中有加減運算,並被用於乘除等運算中時計算的數值就可能不準確。 舉例 #define kItemWith self.bounds.size.height - 10 這裡定義了一個item的長度,正常情
#define巨集定義中的#和##用法和區別
參考Difference between # and ## 簡單來說,在巨集定義中,#是將變數轉換成字串的作用,而##是連線兩個引數作用 ###exaplem #include <iostream> #define stringize_indire
iOS開發之--巨集定義與const的區別及使用方法
巨集定義的常見用法: 定義一段程式碼,或指定字串抽成巨集。 const(常量): 當有字串常量的時候,蘋果推薦我們使用const,蘋果經常把常用的字串定義成const 巨集定義與const的區別: 編譯時刻:巨集是預編譯(編譯之前處理),const是編譯階段。 編
iOS 使用巨集定義函式和程式碼塊
iOS使用巨集定義函式和程式碼塊 今天在開發過程中碰到一個問題:就是父類中要向外傳送通知,然後子類中或者其他類中來接收它。當然一般是把它寫到類方法中去,但是有個問題,就是如果呼叫的類不是它的子類,就不能直接呼叫,當然也可以採用靜態方法實現,我這裡主要是想用巨集
iOS通過巨集定義設定NSLog打印出類名、方法名和NSLog所在行數以及PCH的作用
NSLog函式真機不列印 在實際專案中NSLog函式列印資訊是必不可少的事情,可以友好的幫助我們除錯程式,然而在模擬器上佔用的是電腦的記憶體,但在真機上線時如果不把NSLog函式遮蔽掉,勢必會造成
const與#define巨集定義的區別——C語言深度剖析
const定義的只讀變數在程式執行過程中只有一份拷貝(因為它是全域性的只讀變數,存放在靜態區),而#define定義的巨集常量在記憶體中有若干個拷貝。 #define巨集是在預編譯階段進行替換,而const修飾的只讀變數是在編譯的時候確定其值。 #define巨集沒有型別
C語言巨集定義和巨集定義函式
轉自:http://blog.sina.com.cn/s/blog_861912cd0100tc94.html 要寫好C語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既
【C語言】typedef(自定義資料型別)與#define(巨集定義)用法比較
不管是在C語言還是在C++中,typedef這個詞都不少見,當然出現頻率較高的還是在C程式碼中。typedef和#define有些相似,但更多的是不同,特別是在一些複雜的用法上,就完全不同了。 1.巨集定義(#define) 巨集定義又稱為巨集代換
define巨集定義中的#,##,@#及\符號
一、# 名稱:字串化操作符 其作:將巨集定義中的傳入引數名轉換成用一對雙引號括起來引數名字串。 使用條件:只能用於有傳入引數的巨集定義中,且必須置於巨集定義體中的引數名前 舉例: #define example1(instr) #instr string str=
C語言中巨集定義和函式的取捨
原文連結:http://www.embedu.org/Column/Column177.htm 要寫好C語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既可以寫成函式,也可以
微信小程式定義和呼叫全域性變數globalData
如下:在全域性檔案app.js中定義全域性變數,在子頁面phone.js中獲取 1.現在app.js裡面定義globalData對應的全域性變數 2.然後在其他js檔案進行呼叫。例如在photo.js裡面 ps: 要注意的是需要在檔案開始的時候初
C語言中的一些巨集定義和常用的函式
文章目錄 一、typeof 關鍵字 二、snprintf()函式的作用 三、__builtin_expect的作用 四、C語言中常用的預定義 五、反斜槓的作用 一、typeof 關鍵字 如果
怎樣定義和宣告全域性變數和函式最好?
一個全域性變數或函式可以 (在多個編譯單元中) 有多處 “宣告”, 但是 “定義” 卻只能允許出現一次。 定義是分配空間並賦初值 (如果有) ,宣告則是給需要呼叫該變數或者
C語言詳解(6)巨集定義和條件編譯
巨集定義和條件編譯 一、概述 巨集定義是C語言的預處理功能。巨集定義就是簡單的替換,不作為計算,不也作為表示式。在C語言中作為預處理指令包括:巨集定義、檔案包含、條件編譯。 條件編譯其實就是將if…else…的設計思想引入到預處理功能中,給編譯器使用的。條件編譯時通過
巨集定義和巨集編譯
// 以下是巨集定義的一些用法 11.4.2 #if defined… #else …#endif 此編譯指令為#ifdef … #else …#endif的等價編譯指令。其語法格式如下: #if defined 常量表達式 程式碼段1 #else 程式碼段2 #
iOS 通用巨集定義
最近要搭建新的專案 先把通用的巨集定義給整理一下 // // APPUtil.h // Macro // // Created by WY on 2018/6/15. // Copyr