Sun WorkShop で提供される C コンパイラは、モジュールに使用されかつ extern として定義または宣言されていない関数または変数に対してそのデータ型を int とみなします。このように使用される long およびポインタは、コンパイラの暗黙的な int 宣言によって切り捨てられます。関数または変数に対する適切な extern 宣言は、C モジュール中にではなくヘッダーに置いてください。このヘッダーは、関数または変数を使用する
C モジュールがインクルードするようにしてください。これがシステムヘッダーに定義されている関数または変数であっても、適当なヘッダーをコード内にインクルードしてください。
getlogin() が宣言されていないコードの例を次に示します。
int
main(int argc, char *argv[])
{
char *name = getlogin()
printf("login = %s\n", name);
return (0);
}
|
この場合、次の警告が出ます。
warning: improper pointer/integer combination: op "=" warning: cast to pointer from 32-bit integer implicitly declared to return int getlogin printf |
より良い結果を得るには、次のコードを使用します。
#include <unistd.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
char *name = getlogin();
(void) printf("login = %s\n", name);
return (0);
}
|