※ 引述《PCMan.bbs@bbs.sayya.org (PCMan X Project)》之銘言:
> ※ 引述《UNARY.bbs@bbs.cse.ttu.edu.tw (Rootkit Researcher)》之銘言:
> > int _open(const char *filename, int oflag);
> > int _open(const char *filename, int oflag, int pmode);
> > _open 可以有第三參數,在實作上是用 ... 可變長度引數同 printf
> 第三參數如果是... 應該可有可無吧?
> 就像是 printf 也可以只收一個參數
> > 所以定義 open(file, mode) 這樣的 macro 會有問題
> 當真 @_@,其實我沒有實驗過 XD
其實我的意思是
如果在程式中,兩個參數和三個參數的用法都要使用
那就得定義兩個 macro 了,不能直接把 3 引數代入給 2 參數的 macro
舉個例子
#define pp(x) printf(x)
pp("%d",123);
VC 這樣會有警告,但還是會過,不過執行結果是錯的
gcc 的話根本不過
而我記得 C99 的 macro 參數也支援 ... 了
就可以直接解決
> > 除非支援 C99 ..
> 大不了就包個 wrapper
> int open(...)
> {
> _open(...);
> }
--
@, ●秘密情人● (bbs.cse.ttu.edu.tw)
~\ ◆ Post From: 61-70-137-117.adsl.static.giga.net.tw ◆