Typedef (Linguagem C)

[code]#include <stdio.h>
#include <stdlib.h>

typedef struct stack Stack;

Stack
{
int a;
int b;
};

int main()
{
Stack s;

system(“PAUSE”);
return 0;
}[/code]

não é assim q se usa o typedef?
o q está errado?

[code]typedef struct Stack {

int a;
int b;
}
[/code]

[]´s

[quote][code]typedef struct Stack {

int a;
int b;
} [/code][/quote]

esse tb tá errado…
explicações, por favor =]

typedef struct { int a; int b; } Stack;

O C permite a declaração de structs da seguinte forma:

struct &lt;nome&gt; { &lt;dados> };

E typedefs na seguinte forma:

Você também pode criar uma struct anônima. Basta não forcener um nome:

//Cria a variável ponto de uma struct sem nome. struct { int x; int y; } ponto;

Agora, vc também pode fazer um typedef de uma struct anônima:

//Cria o typedef Ponto para a struct anônima typedef struct { int x; int y; } Ponto;

O que na prática, é equivalente a fazer isso aqui:

//Cria a struct de nome Ponto struct Ponto { int x; int y; };

O typedef fica mais simples na hora de declarar variáveis, pois não exige a palavra struct.
E por isso ele se popularizou:

[code]
//Com typedef
Ponto ponto;

//Sem typedef
struct Ponto ponto;[/code]

Em C++, não é necessário escrever o nome struct na hora de criar variáveis, por isso, não se recomenda por lá a construção com typedef.

[quote]typedef struct { int a; int b; } Stack; [/quote]

ok… mas pq não posso usar o typedef antes?

se eu uso:

não quer dizer que a partir de então posso usar só Stack no lugar de struct stack?
e o na forma normal é:

struct stack { int a; int b; };

se eu já usei o typedef, o q me impede de montar a estrutura assim?

[code]typedef struct stack Stack;

Stack
{
int a;
int b;
}; [/code]

O typedef não é um define. Ele não faz substituição léxica pura e simples.

Ele é um apelido para um tipo. E o tipo deve existir.

Você pode fazer isso aqui:

[code]struct stack {
int a;
int b;
};

//Cria o typedef Stack para a struct stack;
typedef struct stack Stack;[/code]

Mas não isso que vc quer fazer. Se quiser só substituir palavras, sem nenhum significado semântico, use o define (o que é fortemente desaconselhado)

muito esclarecedor!
vlw man! ;]