Linuxのopen(2)のマニュアルを見ると、


int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

の2つの形式があります。C言語では関数のオーバーロードはできないと思っているのですが、これは一体どういうことなのでしょうか? GNU CあるいはC99で関数のオーバーロードをサポートしたということなのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/01/05 19:51:17
  • 終了:2009/01/05 20:33:52

ベストアンサー

id:zzz_1980 No.1

zzz_1980回答回数492ベストアンサー獲得回数642009/01/05 20:10:21

ポイント60pt

プロトタイプ宣言(CentOS5.2で確認)は

int open(const char *, int , ...);

になっています。要するに引数は2個でも3個でも(それ以上でも)構わない。

FreeBSD 7-Stable の open(2)は、最初から

SYNOPSIS
     #include <fcntl.h>
     int
     open(const char *path, int flags, ...);

と書かれています。

url はだみーです。

http://q.hatena.ne.jp

id:yshigeru

ありがとうございます。私も今、APUEでopen(2)の第3引数以降が可変長引数であることを確認したところです。

2009/01/05 20:33:16

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません