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>
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? –
@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 đó. –
@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! –