2013-11-21 4 views
0

Если я хочу, чтобы определить структуры в с я пишуC - Что это строка кода означает, что (о структурах)

typedef struct ObjectP 
{ 
    some code 
} 

и это законно, но что об этом строки кода?

typedef struct Object* ObjectP 
{ 
    some code 
} 

почему есть ошибка синтаксиса на линии ЬурейеЙ структуру объекте * ObjectP

+0

Как вы думаете, что означает второй фрагмент кода? – elyashiv

+0

Я не знаю, у нас есть файл заголовка, который мы должны реализовать , и есть структура, которую мы должны реализовать, и именно эта структура ** typedef struct Object * ObjectP ** – KaramJaber

ответ

5

Это не то, как вы используете typedef со структурами. Вы должны поставить имя типа псевдоним после структура, как

typedef struct Object 
{ 
    ... 
} Object; 

И если вы хотите использовать несколько типов-псевдонимы, вы просто добавить их затем конец, как и в

typedef struct Object 
{ 
    ... 
} Object, *ObjectP; 

Или вы отделяете определения:

struct Object 
{ 
    ... 
}; 

typedef struct Object Object; 
typedef struct Object *ObjectP; 
2

вы используете неправильный синтаксис для typedef указатель struct.

Использование:

typedef struct Object 
{ 
    some code 
} 
*ObjectP; 

Теперь вы можете использовать ObjectP определить указатели на этот struct таким образом: ObjectP ptr1_struct, ptr2_struct;.

+2

Неправильно. –

+0

@JohnBode: Я сожалею об этом '*', спасибо за указание. Я исправил свой ответ –

0

Синтаксис для определения структуры является

 
    structidentifieropt{struct-declaration-list} 

Дополнительный идентификатор представляет собой структура тега; это имя, с помощью которого можно ссылаться на тип структуры. Например:

struct foo { int x; int y; double z; }; 

foo является тег для этого типа структуры; Затем я могу использовать struct foo где мне нужно имя типа:

struct foo bar; 
struct foo *fptr; 

я могу совмещать определение структуры и описание объекта в одном:

struct foo { int x; int y; double z; } bar, *fptr; 

Если я хочу, чтобы создать имя ЬурейеГо для указателя struct foo, я делаю это следующим образом:

typedef struct foo { int x; int y; double z} *FooP; 

FooP теперь синоним struct foo *:

FooP myptr; 

эквивалентно

struct foo { int x; int y; double z; } *myptr; 
1

определение структуры должно заканчиваться "; ". Typedef не является частью определения структуры. Это соглашение о переименовании.

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