データ型 | C | Java |
char | 8ビット | 8ビット |
short | 16ビット | 16ビット |
int | 16又は32ビット | 32ビット |
long | 32ビット | 64ビット |
K&R Cとは、C言語の開発者であるカーニハン&リッチーが提唱し、後に拡張したC言語であり、ANSIによる規格制定前は事実上のスタンダードなC言語仕様だった。ANSI C制定後はANSI Cに準拠することが一般的になったが、現在でもK&R CはUNIX C分野ではスタンダードの一つとしてあつかわれ、一般的なUNIX CコンパイラはデフォルトではANSI CおよびK&R Cの拡張機能をサポートする。
SunのCコンパイラにおいても、デフォルト(-Xa)はANSI CおよびK&R C拡張機能でのコンパイルとなる。ANSI CとK&R Cの相違点については以下を参照(SunCの場合)。
「K&R Sun C と Sun ANSI/ISO C の違い」select関数の第一引き数は、poll関数と違い、指定するファイルディスクリプタの個数とかではなく、指定したファイルディスクリプタ値の最大数+1の値を指定する。ファイルディスクリプタ値は0から割り振られるので、その値がプロセスで使用しているファイルディスクリプタの中で、selectのファイルディスクリプタ配列に指定されているものの最大値となる。
FD_SET(7,&fds);
FD_SET(9,&fds);
selectcnt = select(10, &fds, 0, 0, NULL);
二次元配列を関数に渡す場合、ただポインタを渡すだけだと関数内で二次元配列であることを認識できなくなってしまい、大変都合が悪い。よて、関数の引き素宣言には列の次元をつけることが強く推奨される。以下は関数funcが引き数として二次元配列day[2][3]のポインタを得る場合の宣言方法である。
func(int day[][3]) { ... }
または、
func(int (*day)[3]) { ... }
linuxとunixでのselect()機能の違い
typedef uint32_t in_addr_t; struct in_addr { union { struct { uint8_t s_b1, s_b2, s_b3, s_b4; } _S_un_b; struct { uint16_t s_w1, s_w2; } _S_un_w; in_addr_t _S_addr; } _S_un; } struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; }