Используйте Прямое объявление
Например:
typedef struct
{
int SomeMemberValue;
char* SomeOtherMemberValue;
} SomeStruct;
int SomeReferencedFunction(int someValue, SomeStruct someStructValue);
int SomeFunction()
{
SomeStruct s;
s.SomeMemberValue = 12;
s.SomeOtherMemberValue = "test string";
return SomeReferencedFunction(5, s) > 12;
}
Существует функция, которая позволяет вам повторно использовать эти прямые объявления, называемые Заголовочные файлы .Просто возьмите предварительные объявления, поместите их в заголовочный файл, затем используйте #include
, чтобы добавить их в каждый исходный файл C, в котором вы ссылаетесь на предварительные объявления.
/* SomeFunction.c */
#include "SomeReferencedFunction.h"
int SomeFunction()
{
SomeStruct s;
s.SomeMemberValue = 12;
s.SomeOtherMemberValue = "test string";
return SomeReferencedFunction(5, s) > 12;
}
/* SomeReferencedFunction.h */
typedef SomeStruct
{
int SomeMemberValue;
char* SomeOtherMemberValue;
} SomeStruct;
int SomeReferencedFunction(int someValue, SomeStruct someStructValue);
/* SomeReferencedFunction.c */
/* Need to include SomeReferencedFunction.h, so we have the definition for SomeStruct */
#include "SomeReferencedFunction.h"
int SomeReferencedFunction(int someValue, SomeStruct someStructValue)
{
if(someStructValue.SomeOtherMemberValue == NULL)
return 0;
return someValue * 12 + someStructValue.SomeMemberValue;
}
Конечно, чтобы иметь возможность компилироватьоба исходных файла и, следовательно, всю библиотеку или исполняемую программу, вам нужно будет добавить выходные данные обоих .c файлов в командную строку компоновщика или включить их в один и тот же «проект» (в зависимости от вашей IDE / компилятора).
Многие люди предлагают создавать заголовочные файлы для всех ваших предварительных объявлений, даже если вы думаете, что они вам не понадобятся.Когда вы (или другие люди) перейдете к изменению своего кода и изменению подписи функций, это избавит их от необходимости изменять все места, где функция объявлена заранее.Это также может помочь вам избежать некоторых мелких ошибок или, по крайней мере, запутанных ошибок компилятора.