C C 定義常量 define與const比較

2021-06-10 08:27:18 字數 772 閱讀 9154

1。const定義常量是有資料型別的,而#define巨集定義常量卻沒有。

這樣const定義的常量編譯器可以對其進行資料靜態型別安全檢查,而#define巨集定義的常量卻只是進行簡單的字元替換,沒有型別安全檢查,且有時還會產生邊際效應(不如你願處)。所謂邊際效應舉例如下:

#define n 100

#define m 200 + n

當程式中使用 m*n 時,原本想要 100 * (200+ n )的卻變成了 100 * 200 + n。

const檢查定的型別,如 const float pi = 3.141592653,實際的pi是3.141593,因為float型別的有效位限制。

3。當定義區域性變數時,const作用域僅限於定義區域性變數的函式體內。但用#define時其作用域不僅限於定義區域性變數的函式體內,而是從定義點到整個程式的結束點。但也可以用#undef取消其定義從而限定其作用域範圍。(這是#define的優點)

4。c中的#define和c++中的const都可以定義常量。

在ansi c 語言中用什麼來定義常量呢?答案是enum型別和#define巨集,這兩個都可以用來定義常量,一般不用const。?

5。#define也可以定義帶引數的巨集,c++中使用inline函式來代替。

6。#define任意定義,而const是有型別要求,根據不同的情況,使用不同的定義方式。在有些場合,const跟#define都能做到,但const做的更好,更健壯;在有些場合,#define能做到,const做不到

c const與#define相比有何優點

巨集定義 define 與常量 const 區別

巨集定義 define 是字元替換,沒有資料型別的區別,同時這種替換沒有型別安全檢查,可能產生邊際效應等錯誤 邊際效應 define n 2 3 我們預想的 n 值是 5,我們這樣使用 ndouble a n 2 我們預想的 a 的值是 2.5,可實際上 a 的值是 3.5const 常量是常量的宣...

const常量與define巨集定義的區別

define radius 100 const float radius 100 1 編譯器處理方式不同 define巨集是在預處理階段展開。const常量是編譯執行階段使用。2 型別和安全檢查不同 define巨集沒有型別,不做任何型別檢查,僅僅是展開。const常量有具體的型別,在編譯階段會執行...

const常量與define巨集定義的區別

define radius 100 const float radius 100 1 編譯器處理方式不同 define巨集是在預處理階段展開。const常量是編譯執行階段使用。2 型別和安全檢查不同 define巨集沒有型別,不做任何型別檢查,僅僅是展開。const常量有具體的型別,在編譯階段會執行...