分類: 程式設計

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

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang
標籤: C/C++

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

2 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

2 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

3 年 ago