C++define巨集的邊際效應
const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤(邊際效應)
舉例說明
#define MIN(a, b) a > b ? b : a
這句巨集定義就會帶來意想不到的問題,比如我在這樣使用時:
num = b + MIN(num1, num2);
num的值一直是num1、num2兩個中的最小值,也就是說講b的值直接作為0處理了
正確應該為:
#define MIN(a, b) (a > b ? b : a)
相關推薦
C++define巨集的邊際效應
const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤(邊際效應) 舉例說明 #define MIN(a, b) a > b ? b : a 這句巨集定義
c語言巨集定義#define
1. 利用define來定義 數值巨集常量 #define 巨集定義是個演技非常高超的替身演員,但也會經常耍大牌的,所以我們用它要慎之又慎。它可以出現在程式碼的任何地方,從本行巨集定義開始,以後的程式碼就就都認識這個巨集了;也可以把任何東西定義成巨集。因為編譯器會在預編譯的時候用真身替換
C語言巨集定義中#define中的井號#的使用
#include <stdlib.h> #include <stdio.h> #include <string.h> typedef enum { E_1, E
【C語言】typedef(自定義資料型別)與#define(巨集定義)用法比較
不管是在C語言還是在C++中,typedef這個詞都不少見,當然出現頻率較高的還是在C程式碼中。typedef和#define有些相似,但更多的是不同,特別是在一些複雜的用法上,就完全不同了。 1.巨集定義(#define) 巨集定義又稱為巨集代換
C語言巨集的定義和巨集的使用方法(#define)
1、巨集的功能介紹 在 C 語言中,可以採用命令 #define 來定義巨集。該命令允許把一個名稱指定成任何所需的文字,例如一個常量值或者一條語句。在定義了巨集之後,無論巨集名稱出現在原始碼的何處,前處理器都會把它用定義時指定的文字替換掉。 關於巨集的一個常見應用就是,用它定義數值常量的名稱:
ACMNO.35 C語言-巨集潤年 給年份year,定義一個巨集,以判別該年份是否閏年。提示:巨集名可以定義為LEAP_YEAR,形參為y,既定義巨集的形式為 #define LEAP_YEAR(y)
題目描述: 給年份year,定義一個巨集,以判別該年份是否閏年。 提示:巨集名可以定義為LEAP_YEAR,形參為y, 既定義巨集的形式為 #define LEAP_YEAR(y) (讀者設計的字串) 輸入 一個年份 輸出 根據是否閏年輸出,是輸出"L",否輸出"
C語言 - #define巨集的定義與使用方法
一.巨集的概念與定義方法 1.被定義為”巨集”的標示符稱為”巨集名”.在編譯預處理時,對程式中所有出現的”巨集名”,都用巨集定義中德字串去替換,這稱為”巨集替換”或者”巨集展開”. 2.巨集定義是由源程式中德巨集定義命令完成的.巨集替換是由預處理程式自動完成的;在C語言中,”巨集”分
C++ #define #if #ifndef 巨集指令
不會用就直接複製貼上 #define CURSOR(top,bottom) (((top)<<8)|(bottom)) #define mul(x1,x2) (x1*x2) #define WIDTH 8 #define LENGTH (WIDTH+10) /** *
深入理解C語言——#define巨集和列舉的區別
(1)從處理過程的角度看: #define巨集是由編譯前處理器在預編譯處理時處理的,而且只做簡單的字串的替換。列舉常量則是在編譯的時候確定其值的。 (2)從除錯的角度看: 通常情況下,在編譯器裡,可以除錯列舉常量,而不能除錯巨集常量。 (3)從資料的型別看: #defi
【C基礎】#define巨集定義中的#,##,@#,\ 這些符號的神奇用法
C/C++ 巨集命令的神奇用法。 先看下面三條語句: #define Conn(x,y) x##y #define ToChar(x) #@x #define ToString(x) #x 1. ## 連線操作符 ##表示連線(token pa
const與#define巨集定義的區別——C語言深度剖析
const定義的只讀變數在程式執行過程中只有一份拷貝(因為它是全域性的只讀變數,存放在靜態區),而#define定義的巨集常量在記憶體中有若干個拷貝。 #define巨集是在預編譯階段進行替換,而const修飾的只讀變數是在編譯的時候確定其值。 #define巨集沒有型別
C++預處理命令#define巨集(macro)展開的若干用法
提及#define,你會不會馬上聯想到自己時時用#define MAX 100用於標記一個數組的長度?這樣做無非兩個原因,一來,#define是編譯時的巨集展開,對執行時間毫無影響。其二,使用諸如MAX這類見名知其意的識別符號代替生硬的數學符號使程式更
C++ define與const
編譯期 多個 簡單的 存儲空間 const常量 ons efi 指針變量 錯誤 C++中不但可以用define定義常量還可以用const定義常量,它們的區別如下: 用#define MAX 255定義的常量是沒有類型的,所給出的是一個立即數,編譯器只是把所定義的常量值與
c++ 利用巨集自動生成get set 方法
1.非指標型別的成員變數的生成 // PropertyBuilderByName 用於生成類的成員變數 // 並生成set和get方法 // type 為變數型別 // access_permission 為變數的訪問許可權(public, priavte, protected)
C/C++之巨集、行內函數和普通函式的區別
轉載:https://www.cnblogs.com/ht-927/p/4726570.html C/C++之巨集、行內函數和普通函式的區別 行內函數的執行過程與帶引數巨集定義很相似,但引數的處理不同。帶引數的巨集定義並不對引數進行運算,而是直接替換;行內函數首先是函式,這就意味著函式的很多
#define巨集的高階用法
參考:https://blog.csdn.net/xiahouzuoxin/article/details/9494503 一 、巨集的定義與撤銷 #普通巨集定義 #define PI 3.14 //編譯階段替換掉巨集 #define T1 3+4 //容易產生歧義 #defi
C++中巨集與函式的區別
巨集在編譯時就被替換成它內部的語句了,而函式是執行時呼叫的 所以如果是簡單的東西就寫成巨集,這樣沒有呼叫函式的開銷,效率會高一些。相反,由於巨集每被呼叫一次,就相當於把程式碼複製一份,所以如果比較複雜的巨集被多次呼叫的話,會增加程式碼的體積。因此,太複雜的運算就寫成函式比較好了。 另外,要注意在巨集
《6.C語言巨集定義與預處理、函式和函式庫》
《6.C語言巨集定義與預處理、函式和函式庫》 第一部分、章節目錄 4.6.1.C語言預處理理論 4.6.2.C語言預處理程式碼實戰 4.6.3.巨集定義1 4.6.4.巨集定義2 4.6.5.函式的本質 4.6.6.函式的基本使用 4.6.7.遞迴函式 4.6.8.函式庫 4.6.9.字
C語言巨集定義和巨集定義函式
轉自:http://blog.sina.com.cn/s/blog_861912cd0100tc94.html 要寫好C語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既
C++常用巨集
巨集是由 #define 定義而來,在預處理階段進行巨集展開,它的格式是: #define N 2 + 2 // 僅僅是字串替換 #define N (2 + 2) // 也是字串 ,但是是(2 + 2) #define area(x) (x) * (x)