想吃冰卻又敏感保護不足?新手>新婚族選績優龍頭股 攝影界美人正妹指定相機款黃國昌嗆周祝瑛 教室一...
2012-12-31 10:36:20 人氣(551) | 回應(0) | 推薦(0) | 收藏(0) 上一篇 | 下一篇

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

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
人氣(551) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 亂糟糟筆記 |
此分類下一篇:[Ubuntu] 12.04 快捷鍵操作
此分類上一篇:[VHDL] 垃圾堆積區-移位器除頻器

我要回應
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入以下數字 (ex:123)

(有*為必填)
詳全文