Beruflich Dokumente
Kultur Dokumente
1- Monitor
4- Memria RAM
7- Leitor de CD/DVD
10- Teclado
2- Placa-me
5- Placas de rede, som,...
8- Disco rgido(HD)
3- Processador
6- Fonte de energia
9- Mouse
UC Unidade de Controle
ULA Unidade Lgica e Aritmtica
DMA Acesso Direto Memria
UCP Unidade Central de Processamento
(Microprocessador/Microcontrolador CPU/Gabinete)
MEMRIA
Volteis: registradores, cache, RAM
No-volteis: ROM, HD, CD, DVD, memria flash
DISPOSITIVOS DE E/S
Teclado (E)
Pen Drive (E/S)
Impressoras (S)
Discos Flexveis (E/S)
PROCESSAMENTO DA INFORMAO
Os microprocessadores so formados por milhes de chaves (transistor) que podem estar
abertas ou fechadas, ou seja, so capazes de distinguir apenas dois nveis de tenso (~3
V, valor binrio 1, e ~0 V, valor binrio 0).
A lgica que permite aos computadores digitais processar informao baseada nestes dois
valores chamada lgebra de Boole. Portanto, toda informao (dados ou instrues)
tratada pelos computadores digitais tem que ser convertida em BIT (BInary DigiT, 0 ou 1)
ou BYTE (grupo de 8 bits). Como 28=256, em um byte podem-se representar 256
diferentes valores, desde 0000.0000 at 1111.1111 Linguagem de Mquina.
Para que o computador seja funcional, as instrues e os dados devem ser arranjados de
forma a que se atinjam objetivos especficos Programas.
A linguagem de mquina resulta em programas ininteligveis e mesmo a Linguagem
Assembly gera programas extensos, difceis de serem entendidos, com baixa portabilidade
e caros, embora eficientes e rpidos (linguagens de baixo nvel). Por exemplo, para o
microprocessador 8085 temos:
Linguagem de mquina:
Linguagem Assembly:
Linguagem humana:
0011.1110
0011.0010
MVI A,32H
Armazene o nmero 50 no Registrador A
ALGORITMOS
Processo de clculo, ou de resoluo de um grupo de problemas
semelhantes, em que se estipulam, com generalidade e sem restries, as
regras formais para a obteno do resultado ou da soluo do problema
[AURLIO]
Especificar uma seqncia de passos lgicos para que o computador possa executar
uma tarefa determinada (independe da linguagem)
MANIPULAO DA INFORMAO PELOS ALGORITMOS
CARACTERSTICAS
FORMAS DE REPRESENTAO
1) FLUXOGRAMA
Utiliza smbolos grficos padronizados para representar os algoritmos
VANTAGENS
Visualmente muito informativo
Padronizao mundial
DESVANTAGENS
Aumenta de complexidade e pode perder a clareza medida que o algoritmo
cresce
Difcil de ser traduzido para linguagem de programao
2) LINGUAGEM ALGORTMICA
Pseudolinguagem de programao (Portugol, Pseudocdigo, etc), cujos comandos, em
portugus ou ingls, descrevem as etapas do algoritmo. Nos algoritmos no estruturados
as instrues eram numeradas (LABEL) e as repeties eram foradas por meio de uma
instruo V PARA (GO TO).
VANTAGENS
Usa o portugus ou ingls como base
Facilidade na passagem para as linguagens de programao
Forma de apresentao condensada
DESVANTAGENS
Ainda no est padronizado
Visualmente pouco informativo
CONCLUSO
As duas formas de apresentao podem ser complementares
Fluxograma
mais adequado para dar uma viso geral do algoritmo
ex.: programa principal que chama vrias subrotinas
Pseudocdigo
mais adequado para especificar cada etapa do algoritmo
ex.:detalhar cada subrotina do programa principal
INSTRUES BSICAS DOS ALGORITMOS
Declarao de variveis: var a int[10] ou inteiro a[10]
Expresses aritmticas: a+b-c*d/f**g ou a+b-c*d/f^g
Expresses lgicas: a.E.b ou (a)E(b) ou a AND b ou a & b
Comando de atribuio: ab-c*d/f**g ou a:=b-c*d/f**g
Comando de sada: escreva a ou escreva (a)
Comando de entrada: leia a ou leia (a)
b0
bb+1
a1/b
931: b0
932: bb+1
933: a1/b
2) DECISO
Tambm conhecida por estrutura condicional, a execuo de um ou mais comandos
depende da veracidade de uma condio.
se a>b ento
auxb
ba
aaux
seno
ca+b
fim_se
622:
623:
624:
625:
626:
627:
628:
629:
i1
continue
leia a[i]
c[i]a[i]+b
ii+2
se i<10 v para 528
cont0
continue
se a<b v para 880
aa-b
contcont+1
v para 875
continue
i0
repita
ii+1
leia a[i]
c[i]a[i]+b
at a[i]<0
fim_repita
i0
faa
ii+1
leia a[i]
c[i]a[i]+b
enquanto a[i] 0
fim_faa_enquanto
1054:
1055:
1056:
1057:
1058:
1059:
i0
continue
ii+1
leia a[i]
c[i]a[i]+b
se a[i] 0 v para 1055
REFINAMENTOS SUCESSIVOS
Um algoritmo estar pronto quando todas as suas instrues forem passveis de serem
traduzidas para a linguagem de programao e sua execuo alcanar o resultado
pretendido.
Caso contrrio, as instrues devem ser desdobradas em novas instrues, que
constituiro um refinamento do algoritmo inicial. Isso feito sucessivamente para todos os
comandos, at que o algoritmo esteja pronto.
O algoritmo para um problema nico pode no ser nico programadores diferentes
geram algoritmos diferentes, uns mais eficientes e outros menos, embora todos efetivos
mesmo os algoritmos prontos so passveis de melhorias.
A partir de um primeiro esboo (estrutura base do algoritmo) faz-se sucessivos
refinamentos.
Primeiro se constri um algoritmo efetivo depois se busca o timo.
Partes do algoritmo que aparecem mais de uma vez podem ser agrupadas como
uma nica sub-rotina que ser chamada repetidas vezes.
fundamental documentar o algoritmo com nome, autor, data e objetivo do
algoritmo, descrio das variveis e comandos, seqncia de comandos ou subrotinas.
10
LINGUAGEM C
Desenvolvida por Dennis Ritchie, baseada na linguagem B de Ken Thompson que se
originou da linguagem BCPL de Martin Richards. considerada uma linguagem de mdio
nvel por permitir a manipulao de bits, bytes e endereos de memria.
uma linguagem estruturada e permite a criao de funes, embora no permita a
criao de funes dentro de funes. Essa capacidade de construo de sub-rotinas
isoladas torna a linguagem C muito conveniente para a implementao de programas
complexos.
Outra caracterstica interessante da linguagem C so os blocos de cdigos, ie, grupos de
comando colocados dentro de chaves, que permitem uma implementao mais eficiente e
clara dos algoritmos.
A linguagem C tem apenas 32 palavras-chave reservadas:
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
A linguagem C case sensitive. Por ser muito enxuta, a linguagem C no possui palavraschave para vrias funes que so intrnsecas em outras linguagens, (operaes de
entrada/sada, etc). Por isso, os programas em linguagem C normalmente inclum
chamadas a vrias funes contidas na biblioteca C padro, cujo cdigo-objeto
adicionado, durante a linkedio, ao cdigo do programa para formar o programa
executvel.
11
//incluses de bibliotecas
float x;
int main()
//funo principal
//incio da funo
int x;
printf(%i,x);
//comandos
float f(float y)
//incio da funo
return x+y;
//comandos
//fim da funo
A linguagem C apresenta cinco tipos bsicos de dados (char, int, float, double e void) que
podem ser modificados (signed, unsigned, long e short):
char (8 bits): 256 caracteres (letras, nmeros, smbolos)
int (16 bits): nmeros inteiros (-32.767 a 32.767)
unsigned int (16 bits): inteiros (0 a 65.535)
long int (32 bits): inteiros (-2.147.483.647 a 2.147.483.647)
unsigned long int (32 bits): inteiros (0 a 4.294.967.295)
float (32 bits): nmeros reais (16 dgitos e expoentes 38)
double (64 bits): reais (16 dgitos e expoentes 308)
Os nomes de identificadores (variveis, funes, rtulos, etc) devem comear com uma
letra ou um sublinhado, seguidos de letras, nmeros ou sublinhados. conveniente que os
nomes sejam significativos, mas no excessivamente longos:
auxiliar
vetor1
produto_34
Todas as variveis devem ser declaradas antes de serem usadas. A declarao pode ser
feita fora de todas as funes (variveis globais), dentro dos blocos (variveis locais) e na
definio dos parmetros das funes (parmetros formais). As variveis podem ser
unidimensionais ou multidimensionais (vetores, matrizes, etc).
12
int i, j;
float a[10][10], x[10], c;
int main()
{
int x;
char c;
{
int c;
Arquivo 2
int x, y;
int main()
void funcao1(void)
As variveis locais podem manter seu valor entre chamadas da funo com o uso de static:
static int n;
13
Esse mesmo modificador aplicado a uma varivel global faz com que a mesma seja
reconhecida apenas no arquivo em que foi declarada. Se for usado o modificador register o
compilador ir fazer com que a varivel em questo seja armazenada no dispositivo de
acesso mais rpido disponvel. Portanto, ela poder no ter endereo, caso seja
armazenada em registradores.
As variveis podem ser inicializadas na declarao fazendo a atribuio de alguma
constante (do tipo int, char, float, etc.). Variveis locais e register no inicializadas
possuem valores desconhecidos, variveis globais e locais static no inicializadas
possuem valor zero. Constantes iniciadas em 0 so octais e em 0x so hexadecimais.
Constantes caractere devem ser escritas entre aspas simples a, e string entre aspas
duplas abc.
int i=1, hex=0x80, oct=012;
float a=3.4F, b=-4.35e-3;
retrocesso
\0
nulo
\\
barra invertida
\n
nova linha
\v
tabulao vertical
\r
retorno
\a
beep
\t
tabulao horizontal
aspas
14
OPERADORES
A linguagem C possui diversos tipos de operadores:
Aritmticos: -
--
++
||
>=
^(xor)
<
<=
==
!=
~(comp. de 1)
>>
<<(deslocamentos)
Ternrio: y=x>9?100:200; (se x>9 ento y recebe 100 cc. recebe 200)
Ponteiro: &(endereo do ponteiro) *(contedo do ponteiro)
Obs: 1) um ponteiro o endereo na memria de uma varivel.
2) variveis ponteiro devem ser declaradas: char eu, *tu, eles;
3) Nesse caso, no endereo apontado por tu tem um caractere.
Tamanho em bytes: sizeof x; sizeof (int);
Vrgula: x=(y=3,y+1);
y=3; x=y+1;
+=
*=
/= (x=x+10
x+=10)
! ~
++ -<
*
+
<< <= ==
/
&
^
|
&& || ?:
(tipo)
>>
>
!=
%
* &
>=
sizeof
2) Os parnteses podem ser usados para alterar a ordem de precedncia.
3) Durante a avaliao de uma expresso feita a promoo de tipo.
=
+=
-=
*=
/=
%=
15
putchar(letra);
letra=getc(fp);
putc(letra,fp);
gets(frase);
puts(frase);
cin>>variavel;
cout<<variavel;
Entrada/sada formatada:
printf(caractere %c.\n,letra);
printf(numero %f real.\n,x);
printf(numero %5d com cinco digitos.\n ,i);
printf(completa %05d com zeros.\n ,i);
printf(frase %5.7s de 5 a 7 caracteres.\n ,tu);
printf(numero %.3f com 3 casas decimais.\n ,x);
printf(%5.3f com 5 dig. e 3 casas dec..\n ,x);
printf(%-5.3f justificado a esquerda.\n ,x);
scanf(%d, &i);
L um decimal e armazena em i.
scanf(%c, &a);
L um caractere e armazena em a.
scanf(%s, palavra);
16
7) a entrada no iterativa requer a digitao do enter aps o dado a ser lido, esse
enter permanece na stream de entrada e pode ser lido posteriormente
Especificadores de formato:
%c %s caractere e string
%d %i inteiro decimal
%p ponteiro
%f notao em ponto flutuante decimal
octal
%#o
fora a colocao de 0
%x
%#x
fora a colocao de 0x
%X
%#X
fora a colocao de 0x
17
FUNES MATEMTICAS
Todas a funes a seguir esto definidas na biblioteca math.h. Todos os ngulos so
considerados como radianos, os argumentos das funes devem ser escalares ou
elementos de vetor e matriz, mas nunca o vetor e a matriz.
cos(x) sin(x) tan(x) cosseno, seno e tangente de x
acos(x) asin(x) atan(x) arco cosseno, arco seno e arco tangente de x
atan2(x,y) arco tangente de x/y
cosh(x) sinh(x) tanh(x) cosseno, seno e tangente hiperblicos de x
ceil(x) floor(x) arredondamento inteiro de x, para cima e para baixo
exp(x) log(x) log10(x) exponencial, logaritmo natural e na base 10 de x
fabs(x) fmod(x,y) valor absoluto de x e resto da diviso inteira de x por y
ldexp(x,y) retorna x*2^y
frexp(x,y) retorna a mantissa de x (0,5 a 1) e armazena a potncia de 2 em y
modf(x,y) retorna a parte inteira de x e armazena a parte decimal de x em y
pow(x,y) sqrt(x) x elevado a y e raiz quadrada de x
18
if (a>b) printf(\n%i,a);
else printf(\n%i,b);
Se a expresso entre parnteses resulta em um valor diferente de zero (verdadeiro), o 1o
comando executado, caso contrrio o 2o comando executado.
Obs: 1) a expresso no precisa ser necessariamente um teste lgico.
2) o 1o comando pode ser um comando nico, um bloco ou estar ausente.
3) o else opcional e se refere sempre ao if anterior do mesmo bloco.
4) o 2o comando pode ser outro if formando uma escada if-else-if.
5) o operador ternrio ? pode substituir o if em algumas situaes.
switch (a+b)
{
case 1:
printf(a+b=1);
break;
case 2:
printf(a+b=2);
break;
default:
printf(a+b=%i,a+b);
}
Se o valor da expresso entre parnteses for igual constante de algum case, o comando
subseqente ser executado, caso contrrio o comando subseqente ao default ser
executado. O padro ANSI C estabelece um mnimo de 257 cases. As mesmas
observaes do if so vlidas para o switch. Sendo que default e break so opcionais.
19
Estruturas de repetio:
return x;
Retorna de uma funo, ie, volta ao ponto onde foi feita a chamada da funo. Se tiver um
valor ou varivel associada, esse ser o valor da funo. similar ltima } da funo.
20
goto ponto1;
ponto1:
break;
Termina um case em um comando switch ou fora a fim de um lao no qual esteja inserido,
retornando para o comando seguinte ao lao. Nesse ltimo caso, normalmente vem
associado a uma estrutura de seleo if.
exit();
continue;
Fora a ocorrncia da prxima iterao do lao no qual est inserida, pulando os cdigos
restantes do comando. Para o lao for, fora a verificao da condio e a execuo do
incremento, para os laos while e do-while, fora a verificao da condio.
21
VETORES E MATRIZES
Uma matriz uma coleo de variveis do mesmo tipo que referenciada por um nome
comum. Cada elemento da coleo acessado por um ndice. Em linguagem C os
elementos de uma matriz ocupam posies adjacentes na memria e os ndices se iniciam
com 0, e no com 1.
float x[10][5]...[12]
A quantidade de memria utilizada para armazenar a matriz :
sizeof(tipo)*10*5*...*12
Em linguagem C cabe ao programador se certificar que os limites da matriz no sero
excedidos ao longo do programa. O nome da matriz sem ndices especifica o endereo do
primeiro elemento que pode ser usado como ponteiro para a matriz:
int *p;
int sample[10];
p=sample; // idntico a
p=&sample[0];
sample[5]=10; // idntico a
*(p+5)=10;
O ponteiro para a matriz muito til para passar a matriz como argumento de uma funo,
j que a matriz propriamente dita no pode ser passada. Vetores so matrizes
unidimensionais, sendo que, em linguagem C, as strings so vetores de caracteres que
terminam em nulo \0. O uso de matrizes de caracteres no raro, sendo que cada linha
da matriz pode ser tratada como uma string.
char palavra[15];
char texto[20][80];
gets(texto[2]);
A inicializao das matrizes pode ser feita durante a declarao (inclusive sem
dimension-las):
int i[2][2]={1,34,43,25};
int i[][2]={1,34,43,25};
char palavra[6]=UNESP;
char palavra[6]={U,N,E,S,P,\0};
char palavra[]=UNESP;
Os comandos cin e scanf buscam todos os caracteres at a ocorrncia de um espao em
branco. O comando gets busca todos os caracteres at a ocorrncia do enter. As
constantes caractere de barra invertida permitem inserir caracteres no imprimveis, p.ex.
\n indica o comeo de uma nova linha. Convm lembrar que os elementos de uma matriz
ocupam posies adjacentes na memria, mas duas variveis declaradas em seqncia
no.
22
23
PONTEIROS
Um ponteiro uma varivel que contm um endereo de memria. Se esse endereo o
de uma outra varivel, a primeira varivel aponta para a segunda.
char *p;
Na declarao de um ponteiro, o tipo especificado o da varivel apontada. Assim, a
varivel p armazena um inteiro que o endereo de uma varivel caractere. O operador
unrio & devolve o endereo de seu operando. Enquanto o operador unrio * devolve o
valor armazenado no endereo de seu operando:
p=&palavra;
palavra=*p;
Uma varivel ponteiro pode receber o valor de outro ponteiro, ser incrementada,
decrementada ou deslocada:
p1=p2;
p1++;
p2--;
p1=p1+12;
Obs: os incrementos, decrementos e deslocamentos so feitos segundo o tipo da varivel
apontada. Assim, se o tipo ocupa mais de uma posio de memria um incremento pode
no levar para a posio subseqente da memria.
Um ponteiro pode apontar para outro ponteiro (indireo mltipla):
float **p1, *p2, x;
p2=&x;
p1=&p2;
Durante a compilao de um programa so criadas quatro reas de memria: cdigo do
programa, variveis globais, pilha e heapy. Variveis globais so alocadas durante a
compilao e variveis locais usam a pilha, mas nenhuma delas pode ser acrescentada
durante a execuo. A menos que se use alocao dinmica da memria heapy. Da
biblioteca <stdlib.h> podemos utilizar a funo malloc() para alocar memria
dinamicamente e free() para liber-la:
char *p;
p=(char*)malloc(1000); //aloca 1000 bytes
p=(char*)malloc(500*sizeof(int)); //melhor portabilidade
Como a memria finita convm sempre verificar se o ponteiro no nulo:
if (!(p=(char*)malloc(20*sizeof(float)))) {
printf(SEM MEMRIA.);
exit(1);
}
As operaes utilizando ponteiros para as variveis so, em geral, mais rpidas que as
operaes utilizando as prprias variveis. Alm disso, a alocao dinmica de memria,
24
25
FUNES
Funes so estruturas que facilitam a implementao e verificao dos programas por
dividi-los em blocos independentes (C no permite funes dentro de funes, assim no
estruturada em blocos). Em C tem a seguinte forma geral:
tipo nome(parmetros)
{
comandos;
}
t=4.0;
x=sqrt(t);
Nesse caso, os parmetros formais da funo copiam os valores dos parmetros que so
passados para a funo. Assim, os valores que os parmetros tm fora da funo no so
alterados, mesmo que os parmetros formais sejam alterados no corpo da funo
(chamada por valor).
Se as alteraes nos parmetros formais, dentro da funo, alteram os valores dos
argumentos que foram passados temos a "chamada por referncia". A linguagem C s faz
chamadas por valor. Quando se deseja alterar as variveis que so passadas para uma
funo, seus parmetros formais devem ser declarados como sendo ponteiros. Nesse
caso, na chamada da funo os argumentos devem ser precedidos por um &.
26
A passagem de matrizes como argumento de funes uma exceo, pois feita sempre
por referncia. Podendo ser declarada de maneiras diferentes, evitando sempre a
ambigidade em matrizes multidimensionais:
Prottipo
argumentos
chamada da funo
int x[50]
f(x);
int x[50]
f(x);
int x[50]
f(x);
float A[50][10]
g(A);
float A[50][10]
g(A);
A funo main() pode ter parmetros formais (argumentos de linha de comando) que
seguem o nome do programa na linha de comando do sistema operacional:
i=atoi(argv[1]);
x=atof(argv[2]);
Como o default para tipos de funes o int e o C pode no fazer a verificao de tipo, o
uso incorreto das funes podem gerar resultados bizarros. Para evitar esse tipo de erro foi
27
Obs: 1) uma alternativa para os prottipos seria escrever as funes antes da funo
main(), de modo que o compilador j saiba durante a compilao da chamada das
funes quais so os parmetros e os tipos retornados (pode no funcionar quando
se tem o programa espalhado por vrios arquivos).
2) uma funo que retorna um ponteiro deve ser declarada como sendo um ponteiro
para o tipo de varivel apontada pelo ponteiro de retorno.
3) uma funo que no retorna valor pode ser declarada com void para evitar a
atribuio incorreta do valor retornado.
Em C, uma funo pode chamar a si prpria, se tornando recursiva (p/ex. clculo do
fatorial). A maioria das funes recursivas no torna o programa mais eficiente (em termos
de linhas de cdigos, uso de memria ou tempo de execuo), mas alguns algoritmos so
mais facilmente implementados recursivamente.
Obs: essencial que funes recursivas tenham critrios de parada para que no
entrem em loop infinito.
28
ARQUIVOS
A linguagem C permite que o programa manipule um arquivo armazenado em um
dispositivo de memria secundria utilizando funes de biblioteca. C++ suporta todo o
sistema de arquivo do C, a recproca no verdadeira. Lembrando que a linguagem C++
orientada, e implementar um programa orientado a objeto mais do que simplesmente
utilizar comandos do C++.
Para a linguagem C qualquer dispositivo de E/S um arquivo: HD, disquete, impressora,
teclado, vdeo, etc . O sistema de E/S da linguagem C fornece um nvel de abstrao entre
o programador e o dispositivo utilizado. Essa abstrao chamada de stream e o
dispositivo real chamado de arquivo. Existem dois tipos de streams: texto (seqncia de
caracteres) e binria (seqncia de bytes).
Uma stream associada a um arquivo especfico realizando um processo de abertura,
com recursos diferentes para cada arquivo, p.ex. o acesso aleatrio existe quando o
arquivo um disco mas no para o teclado. No fechamento ocorre a dissociao da
stream e o contedo desta descarregado no arquivo, flushing. Todos os arquivos so
fechados automaticamente ao fim do programa main ou com uma chamada a exit(). O
fechamento no se d quando ocorre uma quebra do programa ou quando se chama
abort().
FILE *arq;
arq=fopen(dados.dat,modo);
fclose(arq);
fecha um arquivo
29
fprintf(arq,texto+spf,&var1,...);
rewind(arq);
30
fseek(arq,nbytes,pos);
feof(arq);
remove(arq);
apaga um arquivo
31
struct ident {
tipo campo1;
...
tipo campoN;
} var1,..., varM;
struct ident {
tipo campo1;
...
tipo campoN;};
struct ident var1,..., varM;
struct assinante {
char nome[30];
char rua[20];
long int cep;
char tel[9];
} residencial[1000], comercial[200];
residencial[10].cep=17030;
printf(%d,comercial[0].cep);
scanf(%d,&comercial[0].cep);
scanf(%s,comercial[0].tel);
scanf(%c,&comercial[0].tel[2]);
gets(residencial[98].rua);
O campo de uma estrutura1 pode ser uma estrutura2, para acessar um campoX desta
ltima a forma geral :
estrutura1.estrutura2.campoX
residencial[23]=comercial[11];
Uma estrutura inteira pode ser passada para uma funo. A passagem da estrutura feita
por valor: a estrutura, que est sendo passada, copiada, campo por campo, em uma
varivel local da funo, no alterando a varivel fora da funo. Assim, os parmetros da
funo devem ser declarados como estruturas (as mesmas dos argumentos), e estas
devem ser declaradas como estruturas globais (fora do main). Na linguagem C pode-se
declarar um ponteiro para uma estrutura:
Isso permite a passagem por referncia de estruturas como argumentos de funes, o que
torna o programa mais rpido. Nesse caso, o acesso aos campos da estrutura feita por
meio do operador seta (->):
p=&assinante[77];
p->cep=37140;
struct status_type {
unsigned delta_cts: 1;
unsigned delta_dsr: 1;
...
unsigned dsr: 1;
unsigned ring: 1;
unsigned rec_line: 1;
} status;
Uma declarao union determina uma nica localizao de memria onde podem estar
armazenadas vrias variveis diferentes em momentos diferentes. Portanto, o compilador
reserva espao suficiente para acomodar o maior tipo dentre os campos (isso permite
tornar o cdigo independente da mquina). A declarao e acesso de uma unio so
semelhantes as de uma estrutura:
union identificador {
tipo nome1;
...
tipo nomeN;
} var1, ... , varM;
Cada valor da lista corresponde a um inteiro comeando em 0, que pode ser inicializado,
no exemplo abaixo mao=0, balaio=10 e carro=11:
sizeof varivel
sizeof (tipo)
#define nome_macro string substitui toda nome_macro que aparecer no cdigo pela
string, o nome da macro pode ter argumentos (macro semelhante a funo):
#define ABS(a) (a)<0? -(a) : (a)
printf(valor absoluto de 1 e %d,ABS(-1));
#error mensagem pra a compilao e mostra a mensagem.
#include <arquivo.h> instrui o compilador a ler o cdigo no arquivo.
#if #ifdef #ifndef #else #elif #endif permitem a compilao condicional de
uma parte do cdigo de acordo com uma condio/definio.
#if condio
comandos;
#endif
#undef nome_macro remove a definio do nome da macro.
defined nome_macro verifica se o nome da macro est definido.
#line numero nome_arquivo estabelece novos __LINE__ e __FILE__.
#pragma permite dar instrues ao compilador (consultar manual).