24h購物| | PChome| 登入
2012-12-31 10:36:20| 人氣2,364| 回應0 | 上一篇 | 下一篇

[C/C++] #define 語法練習

推薦 0 收藏 0 轉貼0 訂閱站台

#define 說實在打 ACM 題目是只有常數還蠻常使用的,而在線上賽 code force, top coder ... 等,將會看到堆積如山的 #define 去壓縮打 coding 時間。

1. 使用 ... 代表傳入參數,後面使用
__VA_ARGS__ 表示參數位置
2. 使用 # 前綴傳參數,或者打在 #define 中,則會轉字串 (加入雙引號)
3. 使用 #@
前綴傳參數,或者打在 #define 中,則會轉字元 (加入單引號)
4. 使用 \ 跨行,不想讓 define 一行太多,最後一個字元打上 '\' 就可以跨行了。
5. #define 只能使用識別字,即 $, _, 0~9, a-z, A-Z, 函數的話則會多 ()

以下的代碼是輾轉相除法 跟 取最大值。
這裡多了一個函數指標,指向函數。



#include <stdio.h>
#define $ int
#define E return
#define W(...) while(__VA_ARGS__)
#define SF(x) scanf("%d", &x)
#define AC(...) printf("%d %d\n", __VA_ARGS__)
$ G($ W, $ WW) {
    E WW ? G(WW, W%WW) : W;
}
$ M($ W, $ WW) {
    $ A[] = {W, WW};
    E A[W < WW];
}
main() {
    $ W, WW;
    $ (*F[])($,$) = {G,M};
    W(SF(W), ~SF(WW))
    AC((*F)(W, WW), (*(F+1))(W, WW));
}

台長: Morris
人氣(2,364) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 亂糟糟筆記 |
此分類下一篇:[Ubuntu] 12.04 快捷鍵操作
此分類上一篇:[VHDL] 垃圾堆積區-移位器除頻器

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文