Apostila C
275 pág.

Apostila C


DisciplinaMétodos e Técnicas de Programação22 materiais161 seguidores
Pré-visualização45 páginas
de x equivalente ao nu´mero 9:
Do mesmo modo, se modificarmos o valor da varia´vel c para 69, estaremos
automa´ticamente modificando o valor da varia´vel x para 1605:
147
Um dos usos mais comum de uma unia\u2dco e´ unir um tipo
ba´sico a um array de tipos menores.
Tome como exemplo a seguinte declarac¸a\u2dco de unia\u2dco:
union tipo{
short int x;
unsigned char c[2]; };
Sabemos que a varia´vel x ocupa 2 bytes na memo´ria. Como cada posic¸a\u2dco
da varia´vel c ocupa apenas 1 byte, podemos acessar facilmente cada uma
das partes da varia´vel x, sem precisar recorrer a operac¸o\u2dces de manipulac¸a\u2dco
de bits (operac¸o\u2dces lo´gicas e de deslocamento de bits):
7.3 ENUMARAC¸O\u2dcES: ENUM
Uma enumerac¸a\u2dco pode ser vista como uma lista de constantes, onde cada
cosntante possui um nome significativo. A ide´ia ba´sica por tra´s da enumerac¸a\u2dco
e´ criar apenas um tipo de dado que contenha va´rias constante, sendo que
uma varia´vel desse tipo so´ podera´ receber como valor uma dessas cons-
tantes.
A forma geral da definic¸a\u2dco de uma enumerac¸a\u2dco e´ utilizando o comando
enum:
enum nome enum {lista de identificadores };
148
Na declarac¸a\u2dco acima, lista de identificadores e´ uma lista de palavras se-
paradas por v\u131´rgula e delimitadas pelo operador de chaves {}. Essss pala-
vras constituem as constantes definidas pela enumerac¸a\u2dco. Por exemplo, o
comando
enum semana {Domingo, Segunda, Terca, Quarta, Quinta, Sexta,
Sabado };
cria uma enumerac¸a\u2dco de nome semana, onde seus valores constantes
sa\u2dco os nomes dos dias da semana.
As estruturas podem ser declaradas em qualquer escopo
do programa (global ou local).
Apesar disso, a maioria das enumarac¸o\u2dces sa\u2dco declaradas no escopo glo-
bal. Por se tratar de um novo tipo de dado, muitas vezes e´ interessante
que todo o programa tenha acesso a enumarac¸a\u2dco. Da\u131´ a necessidade de
usar o escopo global.
Depois do s\u131´mbolo de fecha chaves (}) da enumerac¸a\u2dco e´
necessa´rio colocar um ponto e v\u131´rgula (;).
Isso e´ necessa´rio uma vez que a enumerac¸a\u2dco pode ser tambe´m declarada
no escopo local. Por questo\u2dces de simplificac¸o\u2dces, e por se tratar de um novo
tipo, e´ poss\u131´vel logo na definic¸a\u2dco da enumerac¸a\u2dco definir algumas varia´veis
desse tipo. Para isso, basta colocar os nomes das varia´veis declaradas
apo´s o comando de fecha chaves (}) da enumerac¸a\u2dco e antes do ponto e
v\u131´rgula (;):
enum semana {Domingo, Segunda, Terca, Quarta, Quinta, Sexta,
Sabado }s1, s2;
No exemplo acima, duas varia´veis (s1 e s2) sa\u2dco declaradas junto com a
definic¸a\u2dco da enumerac¸a\u2dco.
Uma vez definida a enumerac¸a\u2dco, uma varia´vel pode ser declarada de modo
similar aos tipos ja´ existente
enum semana s;
149
e inicializada como qualquer outra varia´vel, usando, para isso, uma das
constantes da enumerac¸a\u2dco
s = Segunda;
Por ser um tipo definido pelo programador, usa-se a palavra
enum antes do tipo da nova varia´vel declarada.
Para o programador, uma enumerac¸a\u2dco pode ser vista como uma lista de
constantes, onde cada cosntante possui um nome significativo. Pore´m,
para o compilador, cada uma das constantes e´ representada por um va-
lor inteiro, sendo que o valor da primeira constante da enumerac¸a\u2dco e´ 0
(ZERO). Desse modo, uma enumerac¸a\u2dco pode ser usada em qualquer ex-
pressa\u2dco va´lida com inteiros, como mostra o exemplo abaixo:
Exemplo: enumerac¸a\u2dco e inteiros
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 enum semana {Domingo , Segunda , Terca , Quarta ,
Quinta ,
4 Sexta , Sabado } ;
5 i n t main ( ) {
6 enum semana s1 , s2 , s3 ;
7 s1 = Segunda ;
8 s2 = Terca ;
9 s3 = s1 + s2 ;
10 p r i n t f ( \u2018 \u2018 Domingo = %d\n \u2019 \u2019 ,Domingo ) ;
11 p r i n t f ( \u2018 \u2018 s1 = %d\n \u2019 \u2019 , s1 ) ;
12 p r i n t f ( \u2018 \u2018 s2 = %d\n \u2019 \u2019 , s2 ) ;
13 p r i n t f ( \u2018 \u2018 s3 = %d\n \u2019 \u2019 , s3 ) ;
14 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
15 return 0;
16 }
Sa\u131´da Domingo = 0
s1 = 1
s2 = 2
s3 = 3
No exemplo acima, a constante Domingo, Segunda e Terca, possuem,
respectivamente, os valores 0 (ZERO), 1 (UM) e 2 (DOIS). Como o compi-
lador trata cada uma das constantes internamente como um valor inteiro,
e´ poss\u131´vel somar as enumerac¸o\u2dces, ainda que isso na\u2dco fac¸a muito sentido.
150
Na definic¸a\u2dco da enumerac¸a\u2dco, pode-se definir qual valor
aquela constante possuira´.
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 enum semana {Domingo = 1 , Segunda , Terca , Quarta
=7 , Quinta , Sexta , Sabado } ;
4 i n t main ( ) {
5 p r i n t f ( \u2018 \u2018 Domingo = %d\n \u2019 \u2019 ,Domingo ) ;
6 p r i n t f ( \u2018 \u2018 Segunda = %d\n \u2019 \u2019 ,Segunda ) ;
7 p r i n t f ( \u2018 \u2018 Terca = %d\n \u2019 \u2019 , Terca ) ;
8 p r i n t f ( \u2018 \u2018 Quarta = %d\n \u2019 \u2019 , Quarta ) ;
9 p r i n t f ( \u2018 \u2018 Quinta = %d\n \u2019 \u2019 , Quinta ) ;
10 p r i n t f ( \u2018 \u2018 Sexta = %d\n \u2019 \u2019 , Sexta ) ;
11 p r i n t f ( \u2018 \u2018 Sabado = %d\n \u2019 \u2019 ,Sabado ) ;
12 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
13 return 0;
14 }
Sa\u131´da Domingo = 1
Segunda = 2
Terca = 3
Quarta = 7
Quinta = 8
Sexta = 9
Sabado = 10
No exemplo acima, a constante Domingo foi inicializada com o valor 1
(UM). As constantes da enumerac¸a\u2dco que na\u2dco possuem valor definido sa\u2dco
definidas automaticamente como o valor do elemento anterior acrescidos
de um. Assim, Segunda e´ inicializada com 2 (DOIS) e Terca com 3
(TRE\u2c6S). Para a constante Quarta foi definido o valor 7 (SETE). Assim,
as constantes definidas na seque\u2c6ncia apo´s a constante Quarta possuira\u2dco
os valores 8 (OITO), 9 (NOVE) e 10 (DEZ).
151
Na definic¸a\u2dco da enumerac¸a\u2dco, pode-se tambe´m atribuir va-
lores da tabela ASCII para as constante.
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 enum escapes { re t rocesso= \u2019 \b \u2019 , tabulacao= \u2019 \ t \u2019 ,
nova l inha= \u2019 \n \u2019 } ;
4 i n t main ( ) {
5 enum escapes e = noval inha ;
6 p r i n t f ( \u2018 \u2018 Teste %c de %c e s c r i t a \n \u2019 \u2019 ,e , e ) ;
7 e = tabulacao ;
8 p r i n t f ( \u2018 \u2018 Teste %c de %c e s c r i t a \n \u2019 \u2019 ,e , e ) ;
9 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
10 return 0;
11 }
Sa\u131´da Teste
de
escrita
Teste de escrita
7.4 COMANDO TYPEDEF
A linguagem C permite que o programador defina os seus pro´prios tipos
baseados em outros tipos de dados existentes. Para isso, utiliza-se o co-
mando typedef, cuja forma geral e´:
typedef tipo existente novo nome;
onde tipo existente e´ um tipo ba´sico ou definido pelo programador (por
exemplo, uma struct) e novo nome e´ o nome para o novo tipo estamos
definindo.
O comando typedef NA\u2dcO cria um novo tipo. Ele apenas
permite que voce\u2c6 defina um sino\u2c6nimo para um tipo ja´ exis-
tente.
Pegue como exemplo o seguinte comando:
typedef int inteiro;
152
O comando typedef na\u2dco cria um novo tipo chamado inteiro. Ele apenas
cria um sino\u2c6nimo (inteiro) para o tipo int. Esse novo nome torna-se equi-
valente ao tipo ja´ existente.
No comando typedef, o sino\u2c6nimo e o tipo existente sa\u2dco
equivalentes.
1 #include <s t d i o . h>
2 #include <s t d l i b . h>
3 typedef i n t i n t e i r o ;
4 i n t main ( ) {
5 i n t x = 10;
6 i n t e i r o y = 20;
7 y = y + x ;
8 p r i n t f ( \u2018 \u2018Soma = %d\n \u2019 \u2019 , y ) ;
9 system ( \u2018 \u2018 pause \u2019 \u2019 ) ;
10 return 0;
11 }
No exemplo acima, as varia´veis do tipo int e inteiro sa\u2dco usadas de ma-
neira conjunta. Isso ocorre pois elas sa\u2dco, na verdade, do mesmo tipo (int).
O comando typedef apenas disse ao compilador para reconhecer inteiro
como um outro nome para o tipo int.
O comando typedef pode ser usado para simplificar a
declarac¸a\u2dco de um tipo definido pelo programador (struct,
union, etc) ou de um ponteiro.
Imagine a seguinte declarac¸a\u2dco de uma struct:
struct cadastro{
char nome[50];
int idade;
char rua[50];
int numero; };
Para declarar uma varia´vel deste tipo na linguagem C a palavra-chave
struct e´ necessa´ria. Assim, a declarac¸a\u2dco de uma varia´vel c dessa es-
trutura seria:
153
struct cadastro c;
O comando typedef tem como objetivo atribuir nomes al-
ternativos aos tipos ja´ existentes, na maioria das vezes
aqueles cujo padra\u2dco de declarac¸a\u2dco e´ pesado e potencial-
mente confusa.
O comando typedef pode ser usado para eliminar a necessidade da palavra-
chave struct na declarac¸a\u2dco de varia´veis. Por exemplo, usando o comando:
typedef struct cadastro