2013-10-20 60 views
1

對於我的問題,讓我們假設我有兩個函數,它們都是庫文件夾中的.h文件的原型,以及.c輔助文件中的實現(如下所示),我將在我的程序中使用它們。mkdir的隱式聲明

calsis.c

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <fcntl.h> 
#include "include/calsis.h" /* Extern header */ 

char folder_name[30] = "Information"; 

void no_args() /* Function 1 */ 
{ 
    printf("Hello, world!\n"); 

    if (mkdir(folder_name, S_IRWXU) == -1) 
    perror("Can't create a new folder"); 
} 

void with_args(char *foo) /* Function 2 */ 
{ 
    printf("Hello, world!\n"); 
    printf("Name: %s\n", foo); 

    if (mkdir(folder_name, S_IRWXU) == -1) 
    perror("Can't create a new folder"); 
} 

的東西,我稍後會做什麼,我需要在這兩個功能,用mkdir一個文件夾,但是,在由生成目標文件calsis.o的使用已實現的函數編譯.c文件,使用GCC進行編譯時給我一個警告,即mkdir函數隱含聲明爲

任何想法我可以刪除此警告?

+1

你有沒有'的#include '? – Kunal

+0

你應該[確定](http://man7.org/linux/man-pages/man2/mkdir.2.html)'mkdir'的相關頭文件,並確保你#include它。 –

+0

@Kunal,是的,這是我正在尋找的標題。 – SealCuadrado

回答

4

您還沒有爲mkdir頭:

從人(2)MKDIR:

SYNOPSIS 
     #include <sys/stat.h> 
     #include <sys/types.h> 

     int mkdir(const char *pathname, mode_t mode); 
+0

這也是必要的標題'#包括'?因爲我在另一個地方看到(http://pic.dhe.ibm.com/infocenter/zos/v1r12/index.jsp?topic=%2Fcom.ibm.zos.r12.bpxbd00%2Frtmkd.htm),只有第一個頭是必要的。 – SealCuadrado

+1

mode_t在sys/types.h中。如果你打算使用mode_t,這是必要的。你鏈接的頁面是ZOS,看起來,mode_t是sys/stat.h本身的一部分。我粘貼的手冊頁是針對Linux的。所以這取決於你的平臺是否需要包含它。 –

+0

在我的情況下,它是Fedora,所以,是的,我將它包含在內。 – SealCuadrado