據稱面試問題和答案here。對於不能編譯的C代碼,此解釋是否準確?
下面的代碼會編譯(在C中)嗎?
#define X 8;
int main(void)
{
++X; // will this line compile?
}`
我在C中沒有專家,但我知道一些C++,心想:當然不是,你不能遞增8號,這是一個右值。當然,預處理器在嘗試編譯之前用8
代替X
,並且當它試圖編譯時,它會因爲這個原因而失敗。話又說回來,我是一個讀書的面試問題網站這樣轉念一想,誰知道......
這裏給出的解釋:
「嚴格地說,前綴的操作數(或後綴)的增量操作者必須是一個不可修改的左值現在我們知道左值是什麼,我們必須問自己X是一個左值X是一個宏,這意味着它不能識別內存中的某個地方 - 宏使用簡單的文本替換預處理程序,因爲宏不存在於內存區域中,所以它們不是左值,這意味着X不能用作前綴增量運算符的操作數,因此,上面顯示的代碼將不會被編譯。
這個解釋是否像我認爲的那樣單調?
您可以在上面找到多少錯誤?我想,也許應該是面試的問題...
而這僅僅是有趣:
「直覺上,你也許可以說,上面的代碼不會編譯 - 不知道到底爲什麼然而,在面試的情況下,你應該提供一些如上所述的推理,簡單的是或否的答案在採訪中不會削減。
不,它不會編譯,因爲它應該是'#define X 8',沒有';' –
聽起來非常...學術... :) – Torp
那麼,它也是一個錯誤(在C89中,在任何正常的警告集和程序員指導下)不會返回0;'或'main'末尾的其他數字...... –