Programar em C/Mais sobre variáveis: diferenças entre revisões

[edição verificada][edição verificada]
Conteúdo apagado Conteúdo adicionado
Abacaxi (discussão | contribs)
Sem resumo de edição
Abacaxi (discussão | contribs)
Sem resumo de edição
Linha 1:
 
 
{{revisão}}
 
Linha 10 ⟶ 8:
'''uint''' numero;
''// equivalente a "unsigned int numero;"
 
Como exemplo vamos dar o nome de inteiro para o tipo int:
typedef int inteiro;
 
Como se vê, ''typedef'' cria uma espécie de "apelido" para um tipo de dados, permitindo que esse tipo seja referenciado através desse apelido em vez de seu identificador normal.
 
Um dos usos mais comuns de ''typedef'' é abreviar a declaração de tipos complexos, como ''structs'' ou estruturas. Veja este exemplo:
'''struct''' ''pessoa'' {
char nome[40];
Linha 29 ⟶ 30:
'''Pessoa''' joao;
 
Um "apelido" de tipo é utilizado com bastante freqüênciafrequência, embora não costumemos dar por isso: é o tipo <tt>FILE</tt>, usado nas funções de entrada/saída de arquivos.
typedef '''struct''' ''_iobuf''
{
Linha 49 ⟶ 50:
== sizeof ==
 
O operador sizeof é usado para se saber o tamanho de variáveis ou de tipos. Ele retorna o tamanho do tipo ou variável em bytes como uma contante. Devemos usá-lo para garantir portabilidade. Por exemplo, o tamanho de um inteiro pode depender do sistema para o qual se está compilando. O sizeof é um operador porque ele é substituído pelo tamanho do tipo ou variável no momento da compilação. Ele não é uma função. O sizeof admite duas formas:
'''sizeof''' é uma macro substituída em tempo de compilação por um valor representando o tamanho de um tipo.
sizeof nome_da_variável
sizeof (nome_do_tipo)
 
Se quisermos então saber o tamanho de um float fazemos sizeof(float). Se declararmos a variável f como float e quisermos saber o seu tamanho faremos sizeof f. O operador sizeof também funciona com estruturas, uniões e enumerações.
O erro mais comum com os iniciantes é achar que sizeof retorna o tamanho de variáveis em tempo de execução, portanto é importante ressaltar '''sizeof() só funciona em tempo de compilação'''
 
Outra aplicação importante do operador sizeof é para se saber o tamanho de tipos definidos pelo usuário. Seria, por exemplo, uma tarefa um tanto complicada a de alocar a memória para um ponteiro para a estrutura ficha_pessoal, criada na primeira página desta aula, se não fosse o uso de sizeof. Veja o exemplo:
Exemplo de uso:
 
<source lang="C">
typedef struct {
const char *nome;
const char *sobrenome;
int idade;
} Pessoa;
 
 
'''Correto:'''
int main(void)
<pre>
<nowiki>
Pessoa *joaquim;
joaquim = malloc(sizeof(Pessoa));
joaquim->nome = "Joaquim";
joaquim->sobrenome = "Silva";
joaquim->idade = 15;
</source>
 
Outro exemplo:
<source lang="C">
#include <string.h>
#include <stdio.h>
Linha 65 ⟶ 84:
{
char *nome;
nome = malloc(sizeof(char) * 910);
sprintf(nome, "wikibooks");
printf("Site: http://pt.%s.org/", nome);
Linha 73 ⟶ 92:
*/
}
</source>
</nowiki></pre>
 
''' A sentença acimaabaixo NÃO funciona''', pois sizeof é substituidosubstituído pelo tamanho de um '''''tipo''''' em tempo de compilação.
'''Incorreto:'''
<source lang="C">
<pre><nowiki>
const char *FRASE;
FRASE = "Wikibooks eh legal";
printf("Eu acho que o tamanho da string FRASE é %d", sizeof(FRASE));
</source>
</nowiki></pre>
 
''' A sentença acima NÃO funciona''', pois sizeof é substituido pelo tamanho de um '''''tipo''''' em tempo de compilação.
 
Um exemplo mais interessante do uso de sizeof:
<pre><nowiki>
/* Criando um tipo estruturado de dados: */
 
typedef struct {
const char *nome;
const char *sobrenome;
int idade;
} Pessoa;
 
 
 
int
main(void)
Pessoa *joaquim;
joaquim = malloc(sizeof(Pessoa));
joaquim->nome = "Joaquim";
joaquim->sobrenome = "Silva";
joaquim->idade = 15;
</nowiki></pre>
 
O sizeof acima foi útil pra saber a soma do tamanho de todos os tipos da estrutura Pessoa.
 
== Conversão de tipos ==
Linha 164 ⟶ 156:
== Atributos das variáveis ==
 
Estes modificadores, como o próprio nome indica, mudam a maneira com a qual a variável é acessada e modificada. Alguns dos exemplos usam conceitos que só serão abordados nas seções seguintes, então você pode deixar esta seção para depois se assim o desejar.
 
=== const ===
Linha 224 ⟶ 216:
Neste exemplo, o compilador irá saber que <var>count</var> e <var>sum</var> estão sendo usados no arquivo mas que foram declarados em outro.
 
Uma variável externa freqüentementefrequentemente usada é a variável <var>errno</var> (declarada no arquivo-cabeçalho errno.h), que indica o último código de erro encontrado na execução de uma função da biblioteca padrão ou do sistema.
 
=== static ===