Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

7.3.8 暗黙の宣言に対する注意

-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);
}