C コンパイラは、モジュールで使用されていて、外部定義または宣言されてない関数や変数をすべて整数とみなします。このようにして使用されるロング整数やポインタは、コンパイラの暗黙の整数宣言によって切り捨てられます。この問題を避けるには、C モジュールではなく、ヘッダーに関数または変数に対する適切な extern 宣言を挿入してください。そして、その関数または変数を使用する C モジュールにヘッダーをインクルードしてください。システムヘッダーによって定義されている関数あるいは変数であっても、コードに正しいヘッダーをインクルードする必要があります。次の例を考えてみましょう。
int main(int argc, char *argv[]) { char *name = getlogin() printf("login = %s¥n", name); return (0); } % 警告: ポインタ/整数の組み合わせは不適切です: 演算子 "=" 警告: 32 ビット整数からポインタにキャストしています 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); }