constantes

Iniciado por marKito, 08 de Novembro de 2006, 00:38

tópico anterior - próximo tópico

marKito

boas
tenho dúvidas no que relaciona ás constantes em c
nao consigo perceber o contexto de uma variável do tipo "const","static" e um "define".
alguem m pode explicar sucintamente qual a diferença entre estes?
obrigado

daskrs

#1
Bom, o #define é uma diretiva de processamento, ele nunca vai ser compilado, ele só vai ser executado.
É como o comando #include <lib> , que é apenas um link para a biblioteca. A diferença é que o #define é um "link" para um valor qualquer.

O const é uma constante, um valor que nunca vai ser mudado.
A diferença básica entre os dois é que com o #define você economiza memória e gasta mais processamento, com o const você gasta mais memória e economiza processamento.

O static é um valor estático, ele é normalmente usado com Objetos.
Sempre que tu criar uma classe e criar algum objeto static, o valor do objeto não ir mudar independente de quantos objetos da classe tu crie.

Olha esse exemplo do site GUj, o link já  cai direto no tutorial sobre static do site.

1 // TesteStatic.java
02 class Classe1
03 {
04     // Variavel static
05     public static int contador = 0;
06
07     // Variavel nao-static
08     public int outroContador = 0;
09
10     public Classe1() {}
11
12     // Precisa ser static porque "contador" é static
13     public static void incrementaContador()
14     {
15         contador++;
16
17         System.out.println("contador agora é "+ contador);
18     }
19
20     public void incrementaOutroContador()
21     {
22         outroContador++;
23
24         System.out.println("outroContador agora é "+ outroContador);
25     }
26 }
27
28 public class TesteStatic
29 {
30     public static void main(String args[])
31     {
32         Classe1 c1 = new Classe1();                     
33         c1.incrementaContador();
34         c1.incrementaOutroContador();
35
36         Classe1 c2 = new Classe1();
37         c2.incrementaContador();
38         c2.incrementaOutroContador();
39         
40         Classe1 c3 = new Classe1();
41         c3.incrementaContador();
42         c3.incrementaOutroContador();
43
44         Classe1 c4 = new Classe1();
45         c4.incrementaContador();
46         c4.incrementaOutroContador();
47     }
48 }

a saida gerada do código fica assim.

contador agora é 1
outroContador agora é 1
contador agora é 2
outroContador agora é 1
contador agora é 3
outroContador agora é 1
contador agora é 4
outroContador agora é 1


Espero ter ajudado ;D
Se ainda tiver alguma duvida é só falar.
PS: desculpa não ter respondido antes, é que eu só vi agora esse tópico.