2014-12-30 2 views
2

У меня есть код, который я не могу понять.Объявление указателя союза, как будто это функция

typedef double Align; 
union header{ 
    struct{ 
     union header *ptr; 
     unsigned int size; 
    }s; 
    Align x; 
}; 
typedef union header Header; 

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

Header *morecore(unsigned);  

Это называется тогда как нормальная функция

Header *p; 
p = morecore(nunits); 

Как именно это работает? Нет никакого кода, который бы рассказывал, как эта «функция» работает.

+0

Нам нужна дополнительная информация: компилирует этот код? он работает? Как вы компилируете int? С чем вы связаны? Каков ваш компилятор? Где линия, где упоминается больше? Все это имеет значение. Пожалуйста, покажите нам больше/полный код. – Leonardo

ответ

3
Header *morecore(unsigned); 

Эта функция возвращает указатель типа Header. Таким образом, возвращаемое значение присваивается одному и тому же типу, который является

Header *p = morecore(nunits); 

Так в основном функция morecore() внутренне выполняет некоторую операцию и возвращает указатель, и это возвращаемое значение присваивается p.

+0

Дело в том, что нет никакой функции morecore, объявленной ANYWHERE! Для этого нет никакого кода, ТОЛЬКО места, где он упоминается, это «Header * morecore (unsigned)» и «p = morecore (nunits)» – Chikage

1
Header *morecore(unsigned); 

является упреждающее объявление функции с именем morecore который принимает 1 параметр типа unsigned и возвращает указатель на Header. Это не связано с тем, как был определен заголовок. Эта функция определяется где-то в вашем коде вместе с ее телом.

+0

«* forward *» является избыточным. Объявление функции - это объявление функции - ничего больше, не меньше. Как вы писали, реализация может быть где-то еще. – alk

+0

@alk: Определение также является объявлением, но я бы не назвал его форвардной декларацией. – mafso

+0

Дело в том, что функции, описанной в ANYWHERE, нет. Для этого нет никакого кода, ТОЛЬКО места, где он упоминается, это «Header * morecore (unsigned)» и «p = morecore (nunits)» – Chikage

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