繁体   English   中英

用于在当前目录中打印文件名的C实用程序(Unix)

[英]C utility to print filenames in current directory (Unix)

对C和Unix来说还很新。

我目前有:

#include "stdio.h"
#include <dirent.h>
#include <unistd.h>

int main(int argc, char ** argv)
{ char * current =  get_current_dir_name();    //where error occurs
  DIR * directory = NULL;
  directory = opendir(current);
  if(directory == NULL)
    return -1;
  struct dirent * ent;

  while((ent = readdir (directory)) != NULL)
    printf("%s\n", ent -> d_name);

  if(closedir(directory) < 0)
    return -1;
}

有人告诉我:dir.c:15:警告:初始化使整数指针不进行强制转换

显然,这样做很愚蠢,可以使用一些帮助。

获取当前工作目录名称的标准函数是getcwd() ,而不是get_current_dir_name() get_current_dir_name()是GNU扩展,仅在包含<unistd.h>之前定义了_GNU_SOURCE宏时才可用,并且不建议使用它。

在您的情况下, _GNU_SOURCE ,因此get_current_dir_name()不是已声明函数的名称。 因此,当C编译器看到您尝试调用它时,它将生成一个隐式声明

隐式函数声明在使用时创建一个声明,声明该函数采用任意数量和类型的参数并返回int 因此,在这种情况下,编译器认为已将int分配给char*类型的变量,因此它会生成“初始化自整数的指针,而无需强制转换警告”。

隐式声明是C语言不推荐使用的功能,实际上已从C99版本的语言中删除,尽管现代编译器即使在C99模式下仍经常接受它们(带有警告)。 即使在C89模式下,我也强烈建议您尽可能提高警告级别,以捕获此类错误,例如-Wall -Wextra -Werror -pedantic如果可以处理)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM