[英]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.