UINT8 ListAll( void ) /* 以广度优先的算法枚举整个U盘中的所有文件及目录 */ { UINT8 s; UINT16 OldFileCount; UINT16 RealReadCount; FileNameBuffer[ 0 ].Name[0] = '/'; /* 根目录,是完整路径名,除根目录是绝对路径之外都是相对路径 */ FileNameBuffer[ 0 ].Name[1] = 0; FileNameBuffer[ 0 ].DirStartClust = 0; /* 根目录的起始簇号 */ FileNameBuffer[ 0 ].Attr = ATTR_DIRECTORY; /* 根目录也是目录,作为第一个记录保存 */ for ( OldFileCount = 0, FileCount = 1; OldFileCount < FileCount; OldFileCount ++ ) { /* 尚有新枚举到的文件名结构未进行分析,FileCount处于变化之中 */ if ( FileNameBuffer[ OldFileCount ].Attr & ATTR_DIRECTORY ) { /* 是目录则继续进行深度搜索 */ s = ListFile( OldFileCount ); /* 枚举目录,记录保存到结构中,FileCount可能会改变 */ if ( s != USB_INT_SUCCESS ) return( s ); } }

/* U盘中的文件及目录全部枚举完毕,下面开始根据结构记录依次打开文件 */ printf( "Total file&dir = %d, Open every file:\n", FileCount ); for ( OldFileCount = 0; OldFileCount < FileCount; OldFileCount ++ ) { if ( ( FileNameBuffer[ OldFileCount ].Attr & ATTR_DIRECTORY ) == 0 ) { /* 是文件则打开,目录则跳过 */ printf( "Open file: %s\n", FileNameBuffer[ OldFileCount ].Name ); CH376WriteVar32( VAR_START_CLUSTER, FileNameBuffer[ OldFileCount ].DirStartClust ); /* 将当前文件所在上级目录的起始簇号设置为当前簇号,相当于打开上级目录 */ s = CH376FileOpen( FileNameBuffer[ OldFileCount ].Name ); /* 打开文件 */ if ( s == USB_INT_SUCCESS ) { /* 成功打开了文件 */ s = CH376ByteRead( buf, sizeof(buf), &RealReadCount ); /* 以字节为单位从当前位置读取数据块 */ if ( RealReadCount != sizeof(buf) ) printf( "File size = %d\n", RealReadCount ); /* 文件长度不足sizeof(buf) */ CH376FileClose( FALSE ); /* 不做写操作可以无需关闭 */ } } } }

编译器提示警告函数结尾没有返回值。这怎么改?菜鸟求助。