2011-03-04 47 views
6

是否有可能寫有空間,如定義:#定義與空間

#define replace to replacement here 

我想用「更換這裏」取代「替換到」。

編輯:

我想測試私有成員:

我沒寫

#define private public 

但它並沒有爲私有槽Qt中

工作

所以我的打算是使用類似

#define private slots: public slots: 

無論如何,我已經找到了另一種方式來測試插槽,並通過我意識到這是一個醜陋的黑客。

+2

正如其他人所說,這是不可能的。將問題顛倒過來,*目標*是什麼? – 2011-03-04 12:41:12

+1

如果您想永久更改它,請通過'sed'腳本運行您的源代碼。 – dreamlax 2011-03-04 12:52:53

+0

無論如何您都不允許#define關鍵字,所以這裏有一個雙重錯誤。如果它不起作用,是不是有些代碼(一個庫?)已經用適當的關鍵字編譯了? – 2011-03-04 17:23:00

回答

4

不,你不能

#define identifier something

定義必須是一個標識符不能包含空格什麼。也不能包含連字符,以數字開始,等你只能定義一個標識符

你寫什麼工作

#define replace to replacement here

,但並不像你期望的那樣。此行定義replace將被替換爲to replacement here

hth。

0

可能不是。 它會理解定義之後的第一個單詞是標識符名稱,其餘的就是它的「主體」。

+0

標識符:替換爲 – metdos 2011-03-04 12:35:33

0

不,這是不可能的。爲什麼不這樣做,而不是:

#define replace_to replacement here 
+1

,因爲「替換爲」不是由我寫的。 – metdos 2011-03-04 12:36:52

+0

試試這是否適用於你的編譯器:「#define replace \ to replacement here」。如果沒有,最好你可以做的事情可能是你的代碼在編譯之前用sed或類似的東西進行預處理。 – Axel 2011-03-04 12:43:30

1

你可以這樣做......

#define replace replacement 
#define to here 

當心定義的意想不到的副作用。他們完成工作後可能會想要#undef

0

這聽起來像你試圖做的事情會更好地通過全球搜索和替換服務。

1

如果你正在做單元測試,就可以編譯你的文件用下列標誌

-Dprivate=public 

然後在你的單元測試,你就可以打電話給你的類的每一個私有方法。

編輯:

我最近指出,使用-fno的訪問控制標記上gcc編譯器允許您訪問私有方法或成員。有關該主題的更多信息可以在這裏找到:Unit testing with -fno-access-control