Oracle® Solaris Studio 12.4:C 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

7.3.8 注意隐式声明

如果使用 -std=c90-xc99=none,C 编译器会假定在模块中使用却未在外部定义或声明的函数或变量为整型。编译器的隐式整型声明会将以此方式使用的任何 long 和指针数据截断。将函数或变量的相应 extern 声明置于头文件而非 C 模块中。在使用函数或变量的 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);
}