C - 错误未定义且存储未知
Posted
技术标签:
【中文标题】C - 错误未定义且存储未知【英文标题】:C - ERROR not defined and storage unknown 【发布时间】:2017-09-05 23:54:41 【问题描述】:我有删除目录的代码。我有header1.h
、header1.c
、main.c
。
我遇到了一些错误,但我更难理解的是错误:
(1) ffblk
的存储大小未知。
另外,我对如何定义ffblk
的属性有疑问,即ff_name和ff_attrib
此示例来自互联网上的各种代码示例(甚至来自此处的其他示例),它们都执行相同的代码,只是在我的情况下它不起作用。
我错过了结构的定义吗?或者也许我在不应该是任何代码的地方添加了代码?
请你帮助我好吗?我通常不使用 C 语言编程,我使用的是 Dev-Cpp。
header1.h:
#ifndef HEADER1_H_INCLUDED
#define HEADER1_H_INCLUDED
typedef struct ffblk ffblk;
#endif
header.c:
#include <stdio.h>
#include <stdlib.h>
#include "header1.h"
struct ffblk
char ff_attrib[20]; //this line i added just so dont show error of unknown
char ff_name[20]; //this line i added just so dont show error of unknown
;
main.c:
#ifndef FA_RDONLY
#define FA_RDONLY _A_RDONLY
#endif
#ifndef FA_HIDDEN
#define FA_HIDDEN _A_HIDDEN
#endif
#ifndef FA_SYSTEM
#define FA_SYSTEM _A_SYSTEM
#endif
#ifndef FA_DIREC
#define FA_DIREC _A_SUBDIR
#endif
#ifndef FA_ARCH
#define FA_ARCH _A_ARCH
#endif
# include <stdio.h>
# include <dos.h>
# include <dir.h>
# include <io.h>
# include <conio.h>
#include "header1.h"
typedef struct ffblk ffblk;
int BorrarArchivo(char *nombarch)
printf("Borrando Archivo %s \n",nombarch);
remove(nombarch);
return 0;
int EliminarAtributo(char *nombarch,int atributo)
printf("Elimina Atributo %s %d\n",nombarch,atributo);
chmod(nombarch,atributo);
return 0;
int BorrarArbol(void)
struct ffblk ffblk;
int done,err;
err=0;
done=findfirst("*.*",&ffblk,FA_RDONLY|FA_HIDDEN|FA_DIREC|FA_ARCH|FA_SYSTEM);
while (!done)
if (FA_HIDDEN & ffblk.ff_attrib)
EliminarAtributo(ffblk.ff_name,FA_HIDDEN);
if (FA_SYSTEM & ffblk.ff_attrib)
EliminarAtributo(ffblk.ff_name,FA_SYSTEM);
if (FA_RDONLY & ffblk.ff_attrib)
EliminarAtributo(ffblk.ff_name,FA_RDONLY);
if (FA_ARCH & ffblk.ff_attrib)
err=BorrarArchivo(ffblk.ff_name);
else if (FA_DIREC & ffblk.ff_attrib)
if (ffblk.ff_name[0]!='.')
chdir(ffblk.ff_name);
err=BorrarArbol();
chdir("..");
if (!err)
printf("Removiendo %s\n",ffblk.ff_name);
rmdir(ffblk.ff_name);
else
err=BorrarArchivo(ffblk.ff_name);
if (err)
printf("Error en el borrado ... !"); return err;
done=findnext(&ffblk);
return 0;
int main (void)
int err=0;
char c;
printf("Esta seguro [ Si -> S , No ->otra tecla ] =>");
c=getchar();
if (!(c=='S' || c=='s')) return 0;
err=BorrarArbol();
if (err) printf("Error en el borrado ... !");
return err;
编辑: 我找到了struct的定义并将其粘贴到header.h中
typedef struct ffblk
char lfn_magic[6]; /* LFN: the magic "LFN32" signature */
short lfn_handle; /* LFN: the handle used by findfirst/findnext */
unsigned short lfn_ctime; /* LFN: file creation time */
unsigned short lfn_cdate; /* LFN: file creation date */
unsigned short lfn_atime; /* LFN: file last access time (usually 0) */
unsigned short lfn_adate; /* LFN: file last access date */
char ff_reserved[5]; /* used to hold the state of the search */
unsigned char ff_attrib; /* actual attributes of the file found */
unsigned short ff_ftime; /* hours:5, minutes:6, (seconds/2):5 */
unsigned short ff_fdate; /* (year-1980):7, month:4, day:5 */
unsigned long ff_fsize; /* size of file */
char ff_name[260]; /* name of file as ASCIIZ string */
ffblk;
现在它显示错误:
C:\Users\1\AppData\Local\Temp\cc89P309.o:Untitled3.c:(.text+0x8e): undefined reference to `findfirst'
C:\Users\1\AppData\Local\Temp\cc89P309.o:Untitled3.c:(.text+0x1d8): undefined reference to `findnext'
【问题讨论】:
该错误出现在代码的哪一行? 另外,在 header.c 中添加struct ffblk
的定义后,它会出现吗?
最初的代码只是 main.c 但我得到了多个错误,看到我创建的示例 header.h 和 header.c 剩余的最后一个错误出现在声明的 main.c结构 ffblk ffblk.
我刚刚注意到您正在使用一些特定于 Windows 的文件,所以我可能无法为您提供太多帮助,但您的新错误通常意味着 findfirst 和 findnext 需要定义、包含或链接。你知道他们应该来自什么文件吗?如果你包含dos库(#include <dos.h>
)那么你是否还必须链接到dos库(-ldos
从命令行,不确定在Dev-Cpp中做什么)。
自从我在 c 中工作已经很多年了,但 main.c 不需要像 int main() 最后,问题始终是函数 findfirst(a,b,c) 和 findnext(a,b,c)。我不得不更改函数并使用它们的版本与 2 个参数而不是 3 个参数。我将所有代码与包含、typedef 结构和下面的代码放在一个文件中。
【讨论】:
以上是关于C - 错误未定义且存储未知的主要内容,如果未能解决你的问题,请参考以下文章
Angular AOT Build:内部错误:未知标识符未定义
收到此错误:处理命令时发生未知的服务器端错误。原始错误:无法读取未定义的属性“替换”
[GraphQL 错误]:消息:“rootMutation”类型的字段“createUser”上的未知参数“email”。位置:[object Object],路径:未定义