0

此處的研究項目。在我的C++庫中,我包含C文件:重載三元?:運算符或更改爲包含文件中的{}其他{}

#include "aprogram.c" 

其中我通過重載(幾乎)所有操作符來執行符號。

我必須能夠檢測(condition) ? this : that並提取condition,thisthat以供我的符號執行庫使用。然而,SO 1,SO 2SO 3等已經幫助我認識到,?:不能超載。

  • 有沒有辦法讓我強行重載?:呢?
  • 我可以將包含的C文件中的所有?:語句更改爲ifelse語句而不實際更改文件嗎?
+1

您可以使用Clang構建現有程序的AST,將其轉換並寫出新的C++。 –

+1

你也會遇到'||','&&'和','的問題,因爲過載不會有內置運算符的排序和短路保證。我相當確信,沒有解析和分析代碼就無法解決這些問題。 –

+0

你應該檢查[這裏](http://en.wikipedia.org/wiki/C%2B%2B_operators)看看你可以和不能超載。三元運算符不能超載。 –

回答

1

根據C++標準,你不允許超載?: 你可以做的最好的是使用C宏(但這會導致可怕的代碼)。

+0

「可怕的代碼」是什麼意思? – khajvah

+0

@Chris:怎麼這樣? – Caroline

+0

不要爲此使用宏。相信我,最後你會後悔的。 – edtheprogrammerguy

0

爲了簡化編譯器設計,在20世紀70年代爲了簡化編譯器設計,在C編譯器中增加了宏。宏由'C預處理器'處理。不幸的是,這個預處理器是天真的,只是文本替換而已。生成的代碼通常不必要的複雜,很難查看(使用-E或-P編譯選項)並且很難調試。現在,您應該使用編譯器來處理所有代碼(預處理器通常僅限於#include和條件編譯)。

不幸的是,Bjarne Stroustrup決定不允許你重載?:三元 - 不是因爲任何深層次的技術原因,而是因爲它是唯一的三級操作員,他覺得修改編譯器的努力是沒有道理的。