2016-12-22 49 views
5

我知道這是可能的東西轉換成字符串宏是這樣的:字符串轉換爲字符串不使用C宏

#define STRING(s) #s 

printf("%s", STRING(i am string)); 

但它有可能反其道而行之?

#define MyType(type) ??? 

MyType("uint16_t") myint = 100; 
+2

聞起來像一個[XY問題](http://xyproblem.info)。你真的應該**改善你的問題**(通過編輯)來激勵它。我無法想象一個你想做的事情實際上是有用的。 –

+0

但它如何知道如何將其從字符串轉換爲任意類型?或者它會始終是一個精確度的整數類型?什麼浮點? –

+1

預處理器可以將令牌連接在一起,但不能破壞令牌,所以簡短回答是否。然而,你可以創建一些可能做類似的事情,但這取決於用例和問題,但我認爲這不是你真正需要的。 – ST3

回答

4

AFAIK,使用標準C預處理器是不可能的。你想要的不是標準C11(或C99)語言的一部分。而C++ 11或C++ 14(與C語言不同)的部分都不是。

但是,你可能會使用一些不同的預處理器或一些腳本來將你奇怪的源文件轉換成一些C文件。

您也可以自定義您的編譯器(例如,使用GCC插件或MELT擴展名),通過附加的內置函數或編譯指示來添加此類行爲。這將是非常具體的編譯器,可能需要比你能負擔得起的更多的工作。

+0

爲了完整性:C確實會將'_Pragma'的一部分解除字符串化。但是這隻能用來形成'#pragma'指令,所以不會幫助OP。 – hvd

+0

你可以使用boost :: metaparse從字符串中計算任意編譯時間值,所以它是可能的。 –

+0

可能不在一般情況下。 –