Ошибки C: неявное объявление функции и размера хранилища неизвестно, несмотря на то, что функция и структура являются членами включенного заголовочного файла - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь создать тестовую программу, которая просто ищет любой файл в своей корневой папке:

#include <stdio.h>
#include <dir.h>
#include <dos.h>

struct ffblk ffblk;

int main(){
    int result = findfirst("*.*", &ffblk,FA_ARCH);
    return 0;
}

Но когда код компилируется, объявление ffblk struct возвращает ошибку:

Размер хранилища ffblk неизвестен

и функция findfirst() возвращает:

предупреждение: неявное объявление функции 'findfirst' [- Wimplicit-function-объявление]

, как видно на этом изображении , хотя оба findfirst и ffblk являются членами dir.h, который уже включен. Я использую Visual Studio и компилирую с GCC. Кто-нибудь знает, что не так с кодом или файлами заголовков?

1 Ответ

0 голосов
/ 10 сентября 2018

Вы действительно, действительно, не должны использовать устаревшие API из устаревших заголовков, таких как "dos.h", если вы вообще можете этого избежать. Честное слово!

Тем не менее, если вы настаиваете ...

  1. Как указал dbush, фактический (устаревший!) API - это _findfirst (не findfirst).

  2. Это задокументировано здесь

  3. Вы увидите, что аргументом этого (снова - OBSOLETE ) API является struct _finddata_t *fileinfo (не struct ffblk).

Измените свой код, и все должно скомпилироваться и запустить.

Лучше измените ваши заголовки (на "io.h" и "dir.h") - и исходный код, вероятно, должен скомпилироваться и запустить.

...