C/C++ 程式語言的箭頭 --> 運算子?

最近看到網路論壇中有人在討論 C/C++ 程式語言有趣的箭頭 --> 運算子,跟大家分享一下。


這是很簡單的 C 語言 while 迴圈:

#include <stdio.h>
int main() {
  int x = 10;
  while (x --> 0) { // x 遞減至 0
    printf("%d ", x);
  }
}

這個程式碼的邏輯很簡單,就是讓 x 逐步遞減至 0,不過 while 的判斷式在乍看之下有些奇怪,正常的 C 語言似乎沒有 x --> 0 這種箭頭的運算子,但是這個程式卻可以正常執行。

這是 C++ 的版本,其實大同小異:

#include <iostream>
int main() {
  int x = 10;
  while (x --> 0) { // x 遞減至 0
    std::cout << x << " ";
  }
}

事實上根本就沒有所謂的箭頭運算子,--> 只是 --> 兩個運算子放在一起使用的狀況,也就是說 x --> 0 的意思是 (x--) > 0,只不過這樣的寫法非常容易讓人混淆而已。

以下還有幾種類似的寫法:

#include <stdio.h>
int main() {
  int x = 10;
  while (0 <-- x) { // x 遞減至 0
    printf("%d ", x);
  }
}

C++ 還允許這種寫法:

#include <iostream>
int main() {
  int x = 10;
  while (0 <---- x) { // x 遞減至 0
    std::cout << x << " ";
  }
}

<---- 就是 < -- -- 的意思,每次讓 x 遞減 2

這幾段程式碼的執行效果有些小差異,這裡的重點只是示範這種特別的寫法是可以正常執行的。

這樣的寫法雖然可以正常執行,但是相當不建議這樣寫,因為這樣很容易讓人看不懂。

如果要惡搞別人可以這樣寫 🙂

#include <iostream>
int main() {
  int x = 10;
  while (0 <--++--++-- x) { // x 遞減至 0
    std::cout << x << " ";
  }
}

參考資料:StackOverflow

程式設計

1 Comment

  1. 淮宇

    這好笑xDDD
    箭頭運算子聽起來超Q

Leave a Reply