2014-10-20 3 views
2

Это выдержка из заголовка я нашел в библиотеке 3 партии:Объявление typedef для функции, возвращающей указатель структуры?

struct aiFileIO; 
struct aiFile; 

// aiFile write callback 
typedef size_t (*aiFileWrite) (struct aiFile*, const char*); 

// aiFileIO open callback 
typedef aiFile* (*aiFileOpen) (struct aiFileIO*, const char*); 

Почему последняя строка не содержит struct спецификатор типа перед типом возвращаемого значения? Другими словами, почему эта последняя строка не:

typedef struct aiFile* (*aiFileOpen) (struct aiFileIO*, const char*); 

Что бы понять, что функция возвращает указатель на структуру aiFile.

В случае, если его значение struct aiFile определено в том же заголовке пару строк позже.

+3

Может быть, потому что заголовочный файл был создан для использования в C++ проекта, где ' struct' ключевое слово не требуется? Или, может быть, есть 'typedef', которого вы не видели? –

+0

Я на 99% уверен, что этот заголовок должен использоваться из C. Это файл, если вы не против взглянуть: https://github.com/assimp/assimp/blob/d6551990433264e029b476455db90d1d889e461c/include/assimp/ cfileio.h – user10607

+0

Затем я предлагаю вам сообщить об этом автору как ошибку. –

ответ

3

Единственное объяснение, о котором я могу думать, это то, что заголовок предназначен для C++, где вы не need to typedef struct names.

Если заголовок предназначен для использования с C, то это ошибка, так как код не будет строить, как C.

+0

Этот заголовок должен предоставить c-интерфейс для библиотеки C++. Это ошибка? (это файл: https://github.com/assimp/assimp/blob/d6551990433264e029b476455db90d1d889e461c/include/assimp/cfileio.h) – user10607

+0

Это не так! :) Хотя lib скомпилирован отлично, но я предполагаю, что это потому, что они не используют файл внутри. Только как интерфейс. – user10607

Смежные вопросы