關於Cdefine的小問題,C ,關於 define的問題,請問一下程式碼中 意思

2022-02-25 21:44:23 字數 3044 閱讀 9853

1樓:猿宅

cocos2dx中的吧。 menu_selector看成是函式名,_selector就是函式的引數,也就是說把_selector這個引數強制轉換成sel_menuhandler,而sel_menuhandler的定義為

typedef void (ccobject::*sel_menuhandler)(ccobject*);  也就是符合這樣的格式的函式指標。

類似的。如果我們定義 typedef void (ccnode::*sel_myhandler)(int);   然後寫一個

只要我們在繼承自ccnode(因為我們這裡typedef void (ccnode)用的是ccnode)的類中定義一個引數為int返回值為void的函式,比如 void myclass::myfunc(int);   myclass繼承自ccnode,那麼我們就可以這樣用 my_selector(myclass::myfunc)

//a.h

typedef void (ccnode::*sel_myhandler)(int);

class myclass : public ccnode        //繼承自ccnode

;    //按照自己定義的格式寫函式

void callback

};//b.h

#include "a.h"

class b

;//b.cpp

void execute()

void registercallback(sel_myhandler myhander, ccnode* ptarget)

2樓:

這句話翻譯過來就是說:

首先,menu_selector()是一個函式,_selector是menu_selector()這個函式的引數;

其次,sel_menuhandler也是一個函式,&_selector是這個函式的引數;

最後,menu_selector(_selector)其實就是sel_menuhandler(&_selector)的代號,程式**中只要出現menu_selector(_selector)的地方,都會被編譯器自動替換為sel_menuhandler(&_selector)。

注意, menu_selector(_selector)是一個整體,sel_menuhandler(&_selector)也是一個整體,兩部分之間要有空格才不至於產生歧義。而且,sel_menuhandler外面的括號也是為避免發生歧義而設定的。

3樓:匿名使用者

巨集函式定義。

巨集,就是替換模式,注意替換在編譯之前。

呼叫:menu_selector(1)

在編譯之前被替換為:

sel_menuhandler(1_selector)圓括號是為了防止歧義和「粘連」的界定符號,沒有特殊意義。

地址符 是替換符的一種

c++,關於#define的問題,請問一下**中 \ 意思?

4樓:匿名使用者

\表示 #define語句拆成多行,比如

#define pcl_add_point4d \eigen_align16 \

union ; \

}; \

意思就是

#define pcl_add_point4d eigen_align16 union ; };

5樓:月下憶嬌娘

就是可以吧多行一起處理。

#define test 123

那麼test換成123

#define test 123\

234\

test 換成

123234

6樓:0無_心

確定這能編譯通過嗎?union ; \

}; \

這部分的樣子從來沒見過

好吧,給樓上跪了。。

c++ 裡面 #define問題

7樓:

提前定義,在當前名稱空間都可以用

c++#define問題

8樓:匿名使用者

#define l(r) r*r是巨集定義,直接帶入,不管你r的表示式多複雜都是直接帶入,不是先算r

所以說l(n+n)=n+n*n+n=120

9樓:使用者名稱無法獲取

l(n+n)將編譯為n+n*n+n;

巨集定義只是簡單的對照翻譯,不會進行計算。

10樓:廿哉

確定120?define只是簡單的替換

11樓:匿名使用者

巨集定義只是簡單直接帶入,對照翻譯,不會進行優先順序計算l(r) r*r

l(n) n*n

l(n+n) n+n*n+n

這樣一看就很清楚了!呵呵

c++中用#define遇到的問題

12樓:丶

一般在標頭檔案中寫#ifndef,防止重定義。

你可以在class.h中寫:

#ifndef _class_h_

#define _class_h_

//下面是類的定義

//····

#endif

然後在其他檔案中包含標頭檔案#include"class.h",這樣能保證class.h的內容只編譯一次

13樓:不見彩虹多年

首先,你的#endif在哪?應該在main函式後面。而#include"class.h"是在#ifndef _class_h_

...#endif中間、所以需要在#ifndef _class_h_前面增加#define _class_h_

C語言小問題,關於,關於C語言的小問題?

a b max a max b 語法錯誤,該為 a b max a max b 另外注意 printf 最大值為 c n c 改正為printf 最大值為 d n c 已測試關於i 和 i的區別,如果沒有賦值的話,他們結果是沒區別的,關於他們的區別,我舉例說明 1 int i 0,a a i 這裡結...

關於C 的小問題,一個關於C 的小問題

1 cout 當定義了 carrots就輸出內容,沒定義carrots就編譯不通過。區別就是執行起來還是嘣一聲告訴你沒戲啊 2.用 轉義 cout hollo,word 3.程式模組?不知道你在說啥 4.區別就是前一個函式需要一個 double 型的引數,後一個不要5 就這一句不知道什麼意思 仔細學...

關於c 的小問題,一個關於c 的小問題

windows平臺,肯定要用api的,mfc vcl wxwindow也是封裝一下api而已 其他的不可以 不用windows api你什麼windows程式也編寫不了。很奇怪你為什麼不用windows的api,微軟給你提供這些api就是讓你寫windows程式的,你不用windows api,怎麼...