2013-10-20 21 views
20

Tôi muốn đóng một tập tin liên kết với một tay cầm, nhưng tôi nhận được một cảnh báo từ trình biên dịch:khai Implicit chức năng 'gần'

main.c: 96: 2: cảnh báo: khai ngầm chức năng 'gần' [-Wimplicit chức năng kê khai]

và đây là mã nguồn của tôi:

#include <stdio.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <ctype.h> 
#include <errno.h> 
#include <string.h> 
... 
int handle; 
... 
handle = open(path, flags, mode); 
... 
close(handle); 

Tại sao tôi nhận được cảnh báo này, và làm thế nào tôi có thể giải quyết nó?

Đây là toàn bộ mã nguồn:

main.c

#include "header.h" 

// Prototypes 
void menu(char choix); 
void creer(); 
void lire(); 
int ouvrir(char *path, int flags, mode_t mode); 

int main(int argc, char **argv) 
{ 

    char choix; 
    int c; 
    printf(PROGRAME_NAME, CYAN_BOLD,RESETCOLOR, CYAN_BOLD_BG, RESETCOLOR, CYAN_BOLD, RESETCOLOR); 
    do{ 
     //printf("\e[1;1H\e[2J"); 
     printf("\n\n%sMenu :%s\n", RED_BOLD, RESETCOLOR); 
     printf("\t(%sC%s)réer un fichier\n", RED_BOLD, RESETCOLOR); 
     printf("\t(%sL%s)ire un fichier\n", RED_BOLD, RESETCOLOR); 
     printf("\t(%sE%s)crire sur un fichier\n", RED_BOLD, RESETCOLOR); 
     printf("\t(%sS%s)upprimer un fichier\n",RED_BOLD, RESETCOLOR); 
     printf("\t(%sQ%s)uitter\n",RED_BOLD, RESETCOLOR); 
     do{ 
      printf("\n%sVotre choix :%s ",GREEN_BOLD,RESETCOLOR); 
      do { 
       c = getchar(); 
       choix = tolower(c); 
      } while (c == '\n'); 
     }while((choix != 'c') && (choix != 'l') && (choix != 'e') && (choix != 's') && (choix != 'q')); 

     menu(choix); 
    }while(choix != 'q'); 

    return 0; 
} 


void menu(char choix){ 
    switch(choix){ 
     case 'c' : 
      creer(); 
     break; 
     case 'l' : 
      lire(); 
     break; 
     case 'e' : 
     break; 
     case 's' : 
     break; 
    } 
} 

void creer(){ 
    char path[64], name[64]; 
    char fullName[128]; 
    int fildes; 
    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; 
    //~ O_RDONLY : Access Mode (Read Only) 
    //~ O_CREAT : If the file does not exist it will be created 
    //~ O_EXCL : if this flag is specified in conjunction with O_CREAT, and pathname already exists, then open() will fail. 
    int flags = O_RDONLY|O_CREAT|O_EXCL; 
    printf("\n%s-->Donner l'emplacement du fichier :%s ", CYAN_NORMAL, RESETCOLOR); 
    scanf("%s", path); 
    printf("%s-->Donner le nom du fichier :%s ", CYAN_NORMAL, RESETCOLOR); 
    scanf("%s", name); 
    snprintf(fullName, sizeof fullName, "%s/%s", path, name); 
    fildes = ouvrir(fullName, flags, mode); 
    if(fildes == -1){ 
     printf("\n\t%sImpossible de créer le fichier. Réessayez plus tard. (%s)%s",RED_UNDERLINE,strerror(errno), RESETCOLOR); 
    }else{ 
     printf("\n\t%sLe fichier %s a été créé avec succès.%s", CYAN_BOLD, fullName, RESETCOLOR); 
    } 
    close(fildes); 
} 


int ouvrir(char *path, int flags, mode_t mode) 
{ 
     return open(path, flags, mode); 
} 

header.h

#include <stdio.h> 
#include <fcntl.h> // open function 
#include <unistd.h> // close function 
#include "colors.h" 
#include "const.h" 
#include <ctype.h> 
#include <errno.h> 
#include <string.h> 
+2

Bạn không bao giờ xác định hoặc tuyên bố 'open' và' close'. Bạn nghĩ chúng đến từ đâu? –

+10

@KerrekSB: Chơi người ủng hộ ma quỷ ở đây, để nhắc nhở bạn rằng không phải ai cũng có kinh nghiệm và hiểu biết như bạn, bạn nghĩ 'for' kỳ diệu đến từ đâu? Tôi không cần phải xác định hoặc tuyên bố điều đó. –

+0

@LightnessRacesinOrbit: Có lẽ bạn sử dụng 'for' vì sách giáo khoa C của bạn cho bạn biết ... và nếu nó cho bạn sử dụng' open' và 'close', chắc chắn nó sẽ đề cập đến cách mã được sắp xếp với tiêu đề trong C! –

Trả lời

44

Bạn đã bao gồm tiêu đề phải không? Bạn cần những điều sau đây:

#include <fcntl.h> // for open 
#include <unistd.h> // for close 

làm man openman close trên thiết bị đầu cuối của bạn để tìm hiểu những gì các thư viện cần thiết cho bản thân

+0

Tôi đã bao gồm tiêu đề đó, nhưng tôi vẫn nhận được cảnh báo tương tự: /, tôi cũng đã thực hiện lệnh 'man close' và nó hiển thị cho tôi dưới dạng SYNOPSIS:' #include ' – user2874861

+1

@ user2874861 Điều đó thật kỳ lạ. Bạn không nên nhận được lỗi đó nếu bạn đã bao gồm các tiêu đề thích hợp. Bạn có thể đăng toàn bộ mã của mình? Chỉ cần chỉnh sửa câu hỏi của bạn và đặt mã của bạn ở đó – sukhvir

+7

Tại sao 'mở' và' đóng' trong các tiêu đề khác nhau? O.o – Kevin

Các vấn đề liên quan