Aprenda sobre protótipos de função em C e a macro #define, com exemplos.
#define PI 3.14159int add(int, int);SQUARE(3+1))#ifdef / #endifconst é mais seguro em termos de tipomain, primeiro precisa anunciá-la com um protótipo.#include<stdio.h> int add(int a, int b); // prototype (no body, semicolon required) int main(void) { printf("%d\n", add(3,5)); // can use it now } int add(int a, int b) { // definition can come later return a + b; }
main sem protótipo. O compilador pode avisar e não consegue checar os tipos dos argumentos adequadamente.main.main (a abordagem padrão)..h) e use #include.#define é uma diretiva que realiza substituição de texto antes da compilação. É útil para constantes e atalhos curtos parecidos com funções.#define PI 3.14159 // constant macro #define MAX_SIZE 100 #define SQ(x) ((x)*(x)) // function-like macro int main(void) { double area = PI * 2.0 * 2.0; int a[MAX_SIZE]; printf("5^2 = %d\n", SQ(5)); // -> ((5)*(5)) = 25 }
SQ(x+1) expande para ((x+1)*(x+1)) — mas sem os parênteses, a aritmética quebra. Sempre envolva cada argumento e o corpo inteiro em parênteses.#define PI 3.14159 e calcule a área de um círculo#define SQUARE(x) ((x)*(x))#ifdef DEBUG para compilação condicionalConfira sua compreensão desta aula!
Protótipos permitem que o compilador verifique os tipos nas chamadas que aparecem antes da definição real da função.
#define PI 3.14 define?#define é uma macro do pré-processador — realiza substituição de texto antes da compilação, então não usa memória em tempo de execução.
#include "myfile.h" e #include <stdio.h>?"" procura primeiro no diretório atual, enquanto <> procura nos diretórios padrão do sistema. Use "" para seus próprios cabeçalhos.