簡體   English   中英

使用宏提取typeof運算符提供給我們的信息(使用C語言)

[英]Using macros to extract the info that the typeof operator give us (in C language)

我有一個我不知道是否有解決方案的問題(使用C語言)...

我想將一個宏與typeof“ function”組合起來以在編譯時獲取類型的名稱(因為C我沒有使用polimorphism和其他類型的抽象,這對編譯器來說是個難題)...

我的問題:這似乎是不可能的,我每次嘗試,我只會得到像

  • “ typeof(3)”
  • “ typeof(\\” cat \\“)”
  • 編譯錯誤...

有可能做到嗎? 它僅用於實驗,但我認為在許多代碼中使用可能會很有趣。

提前致謝 :)

簡短答案:您不應該。 typeof()是C語言的GCC擴展,將無法移植。

無論如何,如果您仍要使用它,就無法按照您的描述進行操作。 David Thornley的回答向您說明了原因。

C和C ++具有多個編譯階段,而在較后階段生成的信息對於較早版本不可用。 宏替換相對較早,並且通常是預處理器的一部分。 typeof() ,如果您使用的是通過此類擴展實現C的系統,它將應用於文字或變量的類型。 在解析了預處理器中的內容之后,便會在稍后的階段中生成該信息。

因此,您將沒有可在宏中使用的typeof()信息,並且您將不得不找到另一種方法來完成您想做的事情(類似於C ++模板?)。

看一下__typeof__運算符。

C語言中的MINMAX宏使用它。 標准C和目標C。

C中的MIN和MAX

我假設您正在談論GCC對C的typeof -construct擴展。

不幸的是,我認為這不會對您嘗試執行的操作有所幫助-它不是運算符,它無法評估某些價值。

它只能在某些情況下使用,(據我所知)它與預處理器無關:

在可以使用typedef名稱的任何地方都可以使用typeof-construct

gcc具有gcc typeof keyword 使用它,您不再需要編譯C,而是像C一樣有點不同但又不是完全C的東西。

使用風險自負。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM