C Указатель как вопрос аргументации
У меня есть структура в файле заголовка: Header1.h
typedef struct
{ short SOMETHING; char* SOMETHING_ELSE;}SOME_STRUCT;
У меня есть функция, которая требует указатель на эту структуру в файле: Code.c
void DO_SOMETHING(SOME_STRUCT *PVAL)
{ //Do something
}
Я объявляю функцию в другом заголовке: Header2.h
void DO_SOMETHING(SOME_STRUCT *);
В main.c у меня есть код:
int main(int argc, char **argv)
{
SOME_STRUCT STRUCTY, *ptrSOME_STRUCT;
ptrSOME_STRUCT = &STRUCTY;
DO_SOMETHING(ptrSOME_STRUCT);
return 0;
}
Это в PellesC, CodeLite (GNU) и VC++2010 не будет компилироваться.
Однако, если я изменю Header2.h на
void DO_SOMETHING(SOME_STRUCT);
VC++2010 скомпилирует и запустит это, а CodeLite и PellesC - нет.
Я включил возможность компилировать только код C в VS.
Также во всех 3 IDE, если у вас есть объявление функции в верхней части моего файла Code.c как
void DO_SOMETHING(SOME_STRUCT *);
это скомпилируется.
Поскольку я новичок в C и указателях, почему это работает при одних компиляциях, а не при других. Это возможно ошибка? Я заранее прошу прощения, если это связано с какой-то ситанической проблемой или очень простым вопросом.
Редактировать: оба заголовка включены в оба файла кода.
Перемещение функции из Code.c в main.c ничего не меняет, кроме случаев, когда объявление функции находится вверху файла.
Ошибки PellesC:
ошибка #2001: синтаксическая ошибка: ожидается ')', но найдена ' '. *
ошибка #2161: посторонний список параметров старого стиля.
ошибка #2001: синтаксическая ошибка: ожидается ';' но нашел ')'.
Ошибка VS:
ошибка C2664: "DO_SOMETHING": невозможно преобразовать параметр 1 из "SOME_STRUCT *" в "SOME_STRUCT"