Primeiro, uma macro não é uma variável, nem uma constante. Segundo, não existe "variável constante" como apontado aqui. Variável é aquilo que varia, e constante é aquilo que não varia. Não é possivel usar "variáveis constantes" em programação, isso não existe.
#define é uma diretiva de pré processador que o instrui a trocar todas as ocorrencias com a macro definida.
Quando você define um simbolo com #define, você está dizendo ao compilador para trocar TODAS as ocorrencias desses simbolos no código pelo bloco de texto desejado. Por exemplo, vamos supor que você usará um nome de arquivo um pouco longo várias vezes no código. Você poderá usar o seguinte:
#define ARQUIVO "C:\users\nome de usuario\desktop"
Toda vez que precisar passar o nome do arquivo, pode passar ARQUIVO no lugar. Ou melhor ainda, suponha que você tenha errado o caminho! Se desejasse atualizar o código, iria precisar encontrar cada parte do código que contém o nome errado do arquivo. Usando #define, você precisa mudar apenas a definição, e afetará todas as demais ocorrencias.
É importante notar que o pré processador irá trocar todas as ocorrencias de ARQUIVO pelo nome de usuario. Por isso é importante não colocar um ";", isso poderia gerar erros, a não ser que seja sua intenção. Outra coisa a se notar é que as palavras usadas para macros normalmente são maiusculas. Isso é por um motivo simples: programadores decentes usam isso para "sinalizar" macros e constantes. Torna-se fácil, então, reconhecer macros definidas com #define quando lendo um código que não é seu.
A proposito, não confunda MACROS com CONSTANTES. Uma constante é um valor de apenas leitura, e até mesmo valores diretos podem ser considerados constantes. Por exemplo, printf("hello, world!") contém uma constante, e nesse caso "hello world!" é uma constante. Uma MACRO, em C, é um bloco de texto definido com um nome que terá todas as suas ocorrencias trocadas pelo pré processador ANTES DO CÓDIGO SER COMPILADO. Nada mais que isso. O problema é que o conhecimento do povão é muito superficial, acabam misturando as coisas, como achar que #define define constantes. A unica maneira de se afirmar que #define define constantes é se basear no fato de que um valor direto pode ser considerado uma constante. Em X = 1, 1 é uma constante. Se você usar #define UM 1 e passar para x = UM, então x é o mesmo que x = 1. Visivelmente uma constante e uma macro tem várias diferenças não apontadas pelos grandes tiradores de dúvidas aqui.
Uma ultima coisa a notar sobre a diretiva #define, é que ela pode ser usada para definir macros, como você deve ter visto ser mecionado. Veja uma macro aqui como uma pseudo função. Segue um exemplo:
#define PRINT(str) {printf(str);}
definimos PRINT, uma macro. Ela recebe um parâmetro, que não tem tipo, e que será passado para a função printf(). Essa macro apenas chama a função printf com o parâmetro desejado. O que tem de especial? Não é exatamente uma função, pois uma função(ou rotina) é um bloco de código na memoria que você chama, já uma macro é um bloco de texto que será inserido no código antes da compilação. Em outras palavras, é o mesmo que escrever printf() e passar o parâmetro a todo instante. O parâmetro não tem tipo porque ele será trocado pelo texto no seu lugar. Macros são legais para "funções" pequenas. Mantenha em mente que, ao trocar a ocorrencia da macro pelo texto, você estará inserindo várias ocorrencias do mesmo bloco de código. Isso torna o arquivo maior, obviamente, porém um pouco mais rápido, já que, diferente de funções, não vai precisar chamar o bloco de memoria para executar. É uma das principais diferenças entre macros e funções: uma função é apenas UM bloco na memoria que será chamado pela aplicação, já uma macro terá cada ocorrencia trocada no código fonte antes da compilação. Você pode até mesmo trocar os nomes das palavras chaves da linguagem por macros. Por exemplo:
#define ENQUANTO while
ENQUANTO iria ser substituido por while na hora da compilação.
E ai, as diferenças entre macros e constantes já tornaram-se obvias?
Em C++ podemos usar const para definir uma verdadeira constante.
Answers & Comments
Verified answer
tsc, nenhuma explicação decente.
Primeiro, uma macro não é uma variável, nem uma constante. Segundo, não existe "variável constante" como apontado aqui. Variável é aquilo que varia, e constante é aquilo que não varia. Não é possivel usar "variáveis constantes" em programação, isso não existe.
#define é uma diretiva de pré processador que o instrui a trocar todas as ocorrencias com a macro definida.
Quando você define um simbolo com #define, você está dizendo ao compilador para trocar TODAS as ocorrencias desses simbolos no código pelo bloco de texto desejado. Por exemplo, vamos supor que você usará um nome de arquivo um pouco longo várias vezes no código. Você poderá usar o seguinte:
#define ARQUIVO "C:\users\nome de usuario\desktop"
Toda vez que precisar passar o nome do arquivo, pode passar ARQUIVO no lugar. Ou melhor ainda, suponha que você tenha errado o caminho! Se desejasse atualizar o código, iria precisar encontrar cada parte do código que contém o nome errado do arquivo. Usando #define, você precisa mudar apenas a definição, e afetará todas as demais ocorrencias.
É importante notar que o pré processador irá trocar todas as ocorrencias de ARQUIVO pelo nome de usuario. Por isso é importante não colocar um ";", isso poderia gerar erros, a não ser que seja sua intenção. Outra coisa a se notar é que as palavras usadas para macros normalmente são maiusculas. Isso é por um motivo simples: programadores decentes usam isso para "sinalizar" macros e constantes. Torna-se fácil, então, reconhecer macros definidas com #define quando lendo um código que não é seu.
A proposito, não confunda MACROS com CONSTANTES. Uma constante é um valor de apenas leitura, e até mesmo valores diretos podem ser considerados constantes. Por exemplo, printf("hello, world!") contém uma constante, e nesse caso "hello world!" é uma constante. Uma MACRO, em C, é um bloco de texto definido com um nome que terá todas as suas ocorrencias trocadas pelo pré processador ANTES DO CÓDIGO SER COMPILADO. Nada mais que isso. O problema é que o conhecimento do povão é muito superficial, acabam misturando as coisas, como achar que #define define constantes. A unica maneira de se afirmar que #define define constantes é se basear no fato de que um valor direto pode ser considerado uma constante. Em X = 1, 1 é uma constante. Se você usar #define UM 1 e passar para x = UM, então x é o mesmo que x = 1. Visivelmente uma constante e uma macro tem várias diferenças não apontadas pelos grandes tiradores de dúvidas aqui.
Uma ultima coisa a notar sobre a diretiva #define, é que ela pode ser usada para definir macros, como você deve ter visto ser mecionado. Veja uma macro aqui como uma pseudo função. Segue um exemplo:
#define PRINT(str) {printf(str);}
definimos PRINT, uma macro. Ela recebe um parâmetro, que não tem tipo, e que será passado para a função printf(). Essa macro apenas chama a função printf com o parâmetro desejado. O que tem de especial? Não é exatamente uma função, pois uma função(ou rotina) é um bloco de código na memoria que você chama, já uma macro é um bloco de texto que será inserido no código antes da compilação. Em outras palavras, é o mesmo que escrever printf() e passar o parâmetro a todo instante. O parâmetro não tem tipo porque ele será trocado pelo texto no seu lugar. Macros são legais para "funções" pequenas. Mantenha em mente que, ao trocar a ocorrencia da macro pelo texto, você estará inserindo várias ocorrencias do mesmo bloco de código. Isso torna o arquivo maior, obviamente, porém um pouco mais rápido, já que, diferente de funções, não vai precisar chamar o bloco de memoria para executar. É uma das principais diferenças entre macros e funções: uma função é apenas UM bloco na memoria que será chamado pela aplicação, já uma macro terá cada ocorrencia trocada no código fonte antes da compilação. Você pode até mesmo trocar os nomes das palavras chaves da linguagem por macros. Por exemplo:
#define ENQUANTO while
ENQUANTO iria ser substituido por while na hora da compilação.
E ai, as diferenças entre macros e constantes já tornaram-se obvias?
Em C++ podemos usar const para definir uma verdadeira constante.
Em programação nos existem situações em que precisamos ter a variável com um valor constante para seu usada em todas as funções, por exemplo ao invés de você sempre criar uma variável NOME em cada função para poder usar nela, com o define você não vai precisar declarar toda vez, basta usar a variável, já pensou se você tem 12 funções que utilize a variável NOME ? seria muito redundante o trabalho
fica mais fácil modificar uma variável que vai ser muito usada.
tb assim vc pode alterar dados sem ter que mexer em todo o código.
#
T+
Os programas ficam predefinidos para instalar no disco C(HDD) em vez do OS armazenamento(:D)
EU ponho tudo no:D