Typedef (Linguagem C)

7 respostas
C
#include <stdio.h>
#include <stdlib.h>

typedef struct stack Stack;

Stack
{
   int a;
   int b;
};

int main()
{
  Stack s;

  system("PAUSE");	
  return 0;
}

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

7 Respostas

Alexandre_Saudate
typedef struct Stack {

int a;
int b;
}

[]´s

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

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

ViniGodoy

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

ViniGodoy

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

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

E typedefs na seguinte forma:

typedef &lt;tipo&gt; &lt;novo-nome&gt;;

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:
//Com typedef
Ponto ponto;

//Sem typedef
struct Ponto ponto;

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.

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

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

se eu uso:

typedef struct stack Stack

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?

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

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:

struct stack {
  int a;
  int b;
};

//Cria o typedef Stack para a struct stack;
typedef struct stack Stack;
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)
#define Stack struct stack;
C

muito esclarecedor!
vlw man! ;]

Criado 15 de setembro de 2010
Ultima resposta 15 de set. de 2010
Respostas 7
Participantes 3