GCC不喜歡下面的代碼:如何讓gcc將包含函數調用的表達式識別爲常量?
inline const plus(unsigned x,unsigned y) __attribute__((pure));
inline const plus(unsigned x,unsigned y) { return x+y; }
int arr[plus(1,1)];
它引發以下錯誤:
error: variably modified ‘arr’ at file scope
的唯一的事情是,我所做的一切我能想到的,告訴GCC可以優化加一個(a,b)到「a + b」的調用,而我只傳遞了常量,所以結果應該是是恆定的!
我錯過了什麼使這項工作?或者gcc只是不那麼聰明?
順便說一句,使用加號(1,1)而不是1 + 1的原因是它使用宏來構建數組大小的更一般的構造。
使'plus'成爲一個宏。 – 2012-03-06 22:54:23
你的'加號'沒有返回類型。另外,你需要一個*常量表達式*,函數調用的結果不是。 (在C++ 11中,您可以執行其他操作,以使其正常工作。) – 2012-03-06 22:55:42