-std=c90 または -xc99=none を使用する場合、C コンパイラは、モジュールで使用されていて、外部で定義または宣言されてない関数や変数をすべて整数とみなします。このようにして使用される long およびポインタ型のデータはすべて、コンパイラの暗黙の整数宣言によって切り捨てられます。C モジュールではなく、ヘッダーに関数または変数のための適切な extern 宣言を置いてください。そして、その関数または変数を使用する C モジュールにヘッダーをインクルードしてください。関数または変数がシステムヘッダーによって定義されている場合でも、コードに正しいヘッダーをインクルードする必要があります。次の例を考えてみましょう。
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); }