我從以下代碼複製了Stack Overflow的404 Not Found Error頁面。這段代碼如何打印404?
# define v putchar
# define print(x)
main(){v(4+v(v(52)-4));return 0;}/*
#>+++++++4+[>++++++<-]>
++++.----.++++.*/
print(202*2);exit();
#define/*>[email protected]*/exit()
上面的代碼編譯好,並打印在控制檯上。我認爲陳述print(202 * 2);負責印刷,但我不是正確的,因爲更改此聲明中的數字還打印。
有人能幫我理解這段代碼,它是如何打印的?
因爲有評論說這段代碼沒有編譯,所以我發佈了編譯輸出以供參考。包含上述代碼的文件是Test.c。
GCC TEST.C -o測試
TEST.C:3:1:警告:返回類型默認爲 'INT'[-Wimplicit-INT] 主(){V(4 + V (v(52)-4)); return 0;}/* Test.c:在函數'main'中: Test.c:1:12:warning:隱式聲明函數'putchar' [-Wimplicit-函數聲明] #define v putchar ^ Test.c:3:8:note:in macro'v'main(){v(4 + v(v(52)-4)); return 0;}/* ^ Test.c:頂層:Test.c:6:14:警告:數據定義沒有類型或存儲類型print(202 * 2); exit(); ^ Test.c:6:14:warning:在'exit'聲明中默認爲'int'[-Wimplicit-int] Test.c:6:14:警告: 內置函數'exit'的衝突類型「
./Test
putchar(52)輸出4; 52-4 = 48; putchar(48)輸出0; 48 + 4 = 52; putchar(52)outpus 4再次。 –
https://meta.stackoverflow.com/questions/252184/whats-the-joke-in-the-stack-overflow-404-page-code – rsp
就問:親愛的遷移到MSO選民:可以請你加點理由?我想我在這裏錯過了爲什麼應該遷移? –