2022年3月25日 星期五

怪異的 c 語法

在 telegram 上看到有關 c 語言的一些怪異語法。
覺得有趣, 來分析看看

twitter 上的程式碼是圖片, 不太習慣, 自己打成文字版本。

a1.c
1 #include <stdio.h>
2
3 int main(int argc, char *argv[])
4 {
5   puts("-0.5" + 1);
6   return 0;
7 }


把 "-0.5" 想成 const char *str="-0.5", str + 1 是什麼呢? 當然就是 0.5 了。

a2.c
1 #include <stdio.h>
2
3 int main(int argc, char *argv[])
4 {
5   printf("%d\n", 50 ** "2");
6   return 0;
7 }


一樣的道理, 把 "2" 想成 const char *str2 = "2", *str2 就是 '2', 等於是作 50 * '2'。

a3.c
 1 #include <stdio.h>
 2
 3 int main(int argc, char *argv[])
 4 {
 5   int x = 5;
 6
 7   // while x goes to 0
 8   while(x --> 0)
 9   {
10     printf("%d ", x);
11   }
12
13   return 0;
14 }
15 result: 4 3 2 1 0 


這個只是
 8   while(x --         >           0)

盡量不要寫 a3.c L8 的語法, 你搞不清楚 5 和 0 比, 還是 4 和 0 比, 這寫法是 5 和 0 比, L10 印出 4, 依序下去。

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。