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"

0 ответов

Другие вопросы по тегам