C 中define名字空值,請問C 中 define NULL 0與 define NULL void 0 有什麼區別?都是指空指標嗎?

2022-06-13 19:55:13 字數 6086 閱讀 9634

1樓:匿名使用者

#if !defined (head_h)#define head_h

...這裡應該是標頭檔案具體的內容

#endif

這一段是為了防止別的檔案多次include當前檔案而造成重複定義錯。

head_h只是為了區分當前檔案是否已經被包含,並沒有給定具體的值。所以cout<

防止被多次include具體過程如下:

第一次被包含

#if !defined (head_h)為真執行#define head_h

...#endif

當再次被包含

#if !defined (head_h)為假不執行#define head_h

...#endif

2樓:

c++不可避免的會重複包含標頭檔案,但是我們可以通過類似你那個設定,讓他避免多次編譯,你可以用這個方式

#ifndef __header_h__

#define __header_h__

class a

;#endif

這是一個編譯指令

#ifndef 是說如果未編譯過 xx的話#define 那麼就編譯xx

#endif 與上面的#ifndef 對應,表示編譯的內容要到此結束其中__header_h__代表 header.h這個標頭檔案如果你用cout《輸出是不行的

3樓:

eg.#ifndef (myhead_h) //如果myhead_h標識沒有定義,就執行下面的**。

#define myhead_h //定義標識#include "myhead.h" //定義標頭檔案#endif //結束定義塊這是c++通過巨集定義來防止同一標頭檔案被重複定義。如果myhead_h已經被定義,那麼程式就不執行#define的操作了。

c++的工程標頭檔案中,基本有這樣的定義語句的。

你用cout<

4樓:難得當歌對酒時

定義某個名字,用於條件編譯等 ,比如:

#define a //定義 a

#ifndef a

s1 //如果沒有定義 a ,則編譯 s1 部分#else

s2 //如果定義了 a ,則編譯 s2 部分#endif

請問c++中#define null 0與#define null ((void*)0)有什麼區別?都是指空指標嗎?

5樓:匿名使用者

應該說都是空指標,但是差別在於,前者是一個數值0,一般認為是整數

型數值0;而後者已經另外強制的指定了型別屬性,那就是一個void型的指標。前者在賦值給某個指標(包括void型指標)時,通常會有警告(因為c語言雖然允許把一個整數值賦值給一個指標,但型別畢竟不一致);而後者如果被賦值給一個void型的指標時不會有任何警告(因為型別一致),但賦值給其他型別的指標式也是會有警告的。

6樓:匿名使用者

不一樣,前者是所有指標都可以用0賦值

後面是專門指的空型指標(void *)的0值

指標賦值的現行標準是前者,後者是過去很久的標準了

c++中define巨集定義只有巨集名,沒有字串是怎麼一回事呢

7樓:仙戈雅

c++裡允許只有識別符號(巨集名)而沒有字串的。它的主要作用用於條件編譯。比如常用的手段就是判斷某識別符號是否被#define定義過。

8樓:冰血無雙

看標頭檔案,肯定有條件編譯#ifdef/#ifndef...#else...#endif

c++中可以用#define定義其它型別的值嗎?

9樓:匿名使用者

define 本質上相當於 字串替換 ,也就是替換你**裡的文字因此它本身是沒有任何型別的,可以是數字 可以是單詞 等等比如#define aaa 5

那麼 當你這麼使用時

int a= aaa ;

就相當於定義了一個數字.

而你要是

#define aaa tom

int tom,jerry;

jerry=aaa;

這又相當於 定義了一個單詞(識別符號),等價於jerry=tom;

所以 ,define 和型別沒啥關係, 他就是相當於替換**

10樓:孟羽然

#define是巨集定義,而不是變數定義。

說白了,它只是起到一個簡單的文字替換的作用,僅僅在編譯時進行文字替換。等編譯完成以後,巨集就不存在了。

所以,#define和變數型別沒有任何關係,你定義成什麼內容都可以。甚至可以定義一段**、一個函式……

例如:#define a 1000

#define b "helloworld"

#define c 'c'

#define d 3.1415

#define max(x,y) ((x)>(y)?(x):(y))

#define log(msg) fprintf(stderr, "%s\n", msg);

#define list(folder) myfile *f = get_file_list(folder); \

while (f != null) \

11樓:匿名使用者

可以,#define只是在編譯時的替換,啥都可以定義,資料,字串,函式,識別符號

在c++中可以為int型別賦空值嗎?怎麼賦呢?

12樓:

#include

int main(void)

上面這段程式是用g++(一種c++語言的編譯器)編譯通過的,但是編譯器會給出警告:

warning: initialization makes integer from pointer without a cas

我們將n的值輸出,n為0 (注意,0是個整數,與空不等價啊)

有關null的巨集定義在這裡可以簡單認為是: #define null 0

但是要注意了,這樣的巨集定義後的結果如果是賦給一個指標變數可以將指標的指向賦值為空,但是對於整形變數應該是不行的。c++中對於整形變數而言定義的同時將會被賦予一個初始值(嚴謹起見我們認為這個值沒***)。但是不管是怎麼賦值,一個整形變數的值不可能為空,因此可以認為我們無法辦到將一個整型變數賦值為空。

13樓:蛇霏妹兒

首先定義一個整數型別變數,如:int a

然後賦值為0,如:int a=0,就可以了

謝謝注意要在末尾加上分號!!!!!!!!!

14樓:匿名使用者

當然不可以,樓上的別亂說。

null 在其它語言中其實相當於c++中的指標為null,而不是基本型別。基本型別不可能沒有值。

即可以 int *pi = null;

而int i = null; 是錯誤的,因為在這種情況下 null 其實代表 0.

15樓:湯姆貓

是不行的。。。。。

char,string可以

c++ 中define(巨集定義) 各種用法(含特殊),小舉個例子,謝謝!

16樓:會飛的小兔子

1、define是巨集定義,程式在預處理階段將用define定義的內容進行了替換。因此在程式執行時,常量表中並沒有用define定義的常量,系統不為它分配記憶體。而const定義的常量,在程式執行時,存在常量表中,且系統為它分配記憶體。

2、define定義的常量,預處理時只是直接進行了替換,因此在編譯時不能進行資料型別檢驗。而const定義的常量,在編譯時進行嚴格的型別檢驗,可以避免出錯。

3、define定義表示式時要注意「邊緣效應」。

例如:#definen1+2;

floata=n/2.0;

按照常規做法,可能會認為結果是3/2=1.5;

但是實際上,結果應該為1+2/2.0=2.0;

若想要實現3/2,則#definen(1+2);

即為避免邊緣效應,一定要加括號。

擴充套件資料c++巨集定義

#define命令是c++語言中的一個巨集定義命令,它用來將一個識別符號定義為一個字串,該識別符號被稱為巨集名,被定義的字串稱為替換文字。

1、簡單的巨集定義:

#define 《巨集名》 《字串》

例: #define pi 3.14159262、帶引數的巨集定義

#define 《巨集名》 (《參數列》) 《巨集體》

例: #define a(x) x

17樓:湖人總冠軍

1、define是巨集定義,在預處理階段,程式將替換define定義的內容,因此,當程式執行時,常量表中沒有用define定義的常量,系統不會為它分配記憶體,當程式執行時,const定義的常量存在於常量表中,並且系統為它分配記憶體。

2、define定義的常量,只在預處理期間直接替換,因此在編譯期間無法執行資料型別驗證,對於const定義的常量,在編譯時進行嚴格的型別檢查可以避免錯誤。

3、define定義表示式時要注意「邊緣效應」。

例如:#definen1+2;

floata=n/2.0;

按慣例,可認為結果為3/2=1.5;

但實際上,結果應該是1+2/2.0=2.0;

如果你想達到3/2,定義(1+2);

為了避免邊緣效應,必須加括號。

c++程式中巨集定義只有巨集名沒有字串是怎麼一回事

18樓:匿名使用者

-比如:#define usehdmi表示定義usehdmi這個巨集,但內容是空的,這樣的巨集一般不會用於替換

-用途:在程式中會這樣用

#ifdef usehdmi

... //巨集被定義時的處理程式

#else

... //巨集未被定義時的程式

#endif

-這樣假設我們在使用hdmi介面時會在標頭檔案中寫:#define usehdmi,或寫#define usehdmi 1也是一樣的

-否則用預設模式可註釋此句或寫:#undef usehdmi-即可實現程式增加處理hdmi介面的部分,或者去除。

19樓:匿名使用者

怎麼可能沒有字串,空字串也是字串

在c++中#define的作用是什麼?

20樓:匿名使用者

更正一下樓上的:

#define 是巨集定義,定義一個全域性變數,在整個檔案中都可以使用。

如 #define a 3

即認為a 等同於3

int d=10%a;//等同於 int d=10%3;

結果得 d = 1

21樓:匿名使用者

巨集定義比如說#define a b;

意思就是說當程式中遇到a的時候,將a替換為b

22樓:匿名使用者

#define a b

的意思是

在下面的程式裡面

所有的a都替換成b

這完全是字元替換

所以使用的時候要小心

如果你#define a x+y

後面用a*a的時候

就會替換為x+y*x+y

而不是(x+y)*(x+y)

c++中如何用#define替換一條語句? 例如將所有的using namespace std替換為uns?

23樓:匿名使用者

#include

#define  uns using namespace std;

unsint main()

{cout<<"hello world"<如果最後std後不加分號  uns後要加分號  uns;

C中存在define的巨集定義嗎,C 中怎麼寫類似c語言的 define?

1全部 程式設計師參考 define請參見 c 前處理器指令 條件方法教程 define 使您得以定義符號,這樣,通過將該符號用作傳遞到 if 指令的表示式,該表示式將計算為 true。define symbol 其中 symbol 要定義的符號名稱。備註符號可用於指定編譯的條件。可以用 if 或 ...

c中求e的值,C 中求出e值

演算法沒有錯,錯的是你選錯了迴圈的極限。階乘積累的很快,超過100以後long就無法表示了,到了1000就成了nan,把1000換成20就可以了。100太大了,而且1 1000 那都小數點後多少位了,用20精度就夠了 a 溢位了,a階乘到150,a的值都到了10的260次方了,知道10的260次方是...

怎樣在C中宣告型別為int,值為空的變數

平常的 int 型別是不允許為空的,但是 c 支援在型別後面加 來定義以為可以為空的值型別,寫法如下 int?a null 檢查 a 是否為空 if a.hasvalue else 你是說可空的int型別的變數怎麼宣告 int?currentvalue null 這樣的宣告就可以了,在賦值過程中可以...