

C言語ソケットファイルのオブジェクトを見ているのですが、これは関数ですか？構造体ですか？  
見た目は、関数だと思うのですが、カッコの前についているInt型の変数が分かりません。

なぜこの位置にあるかやこれが何であるか教えて下さい。  
よろしくお願い致します。

[code]

    int
    __socket (domain, type, protocol)
         int domain;
         int type;
         int protocol;
    {
      __set_errno (ENOSYS);
      return -1;
    }
    
[/code]


CC BY-SA 4.0
2022-04-04T18:12:24.137
88168
2022-04-05T23:38:30.650
2022-04-05T00:22:17.993
3060
47147
question
c
C言語　書き方　ソケット


C言語の関数表記で[K&Rスタイル](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EC#K&R%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB)と呼ばれています。

C言語が1978年、最初に発表された The C Programming Language (1st edition) での構文です。  
その後、ANSI Cが定められる際に構文が変更され現在の形となっています。1988年に出た The C Programming Language (end
edition) ではANSI Cに対応され、質問の構文は消えています。

* * *

> ソケットプログラム自体が、かなり前に作られたものということなのですね。

質問に掲示されたソースコードの出典はわかりませんが、関数名からして、[socket(2)](https://linuxjm.osdn.jp/html/LDP_man-
pages/man2/socket.2.html)を実現するもので、OSに組み込まれるものと推測します。OS付属のCコンパイラーは古いものもあり、それを利用しようとすると必然的に古い形式を選択せざるを得ない場合があります。

例えばプログラミング言語Perlは多くのOSで動作します。これは、多くのOSに用意されているCコンパイラーでコンパイル可能ということを意味します。このため、Perlは永らくK&Rスタイルを採用していました。[PerlがANSI
C形式のコンパイラーを要求するようになったのは、1998年の5.005リリースから](https://en.wikipedia.org/wiki/Perl_5_version_history)です。（この辺りもかなり前と言われればそれはそうですが…）


CC BY-SA 4.0
2022-04-04T22:36:53.163
88169
2022-04-05T23:38:30.650
2022-04-05T23:38:30.650
4236
4236
88168
answer

[code]

    int
    __socket (domain, type, protocol)
         int domain;
         int type;
         int protocol;
    {
      __set_errno (ENOSYS);
      return -1;
    }
    
[/code]

を今風に書くと

[code]

    int __socket (int domain, int type, int protocol)
    {
      __set_errno (ENOSYS);
      return -1;
    }
    
[/code]

となります。

最初のintは戻り値ですね。


CC BY-SA 4.0
2022-04-05T00:53:11.520
88173
2022-04-05T00:53:11.520
24490
88168
answer