簡體   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