Tengo unas macros de uso general que se necesitan universalmente en casi todos los archivos C que escribo. Actualmente los estoy copiando en cada archivo en el que los necesito. Probablemente sea una mala idea porque eventualmente voy a tener que cambiar uno de ellos y luego terminaré con macros definidas de manera incoherente entre los archivos.Reutilizando una macro C en varios archivos
¿Hay alguna forma de crear un archivo de encabezado para macros? Traté de hacer un encabezado con todas mis macros e incluir eso, pero todavía recibo advertencias del compilador.
ACTUALIZACIÓN: Las advertencias específicas que recibo son declaraciones implícitas de funciones como V4 del segundo ejemplo.
Un ejemplo:
//file1.c
#define COMMON_NUMBER 1
//file2.c
#define COMMON_NUMBER 1
//...
//fileN.c
#define COMMON_NUMBER 1
//Oh wait, it should have been 2 all along..... *facepalm*
Un mejor ejemplo:
//file1.c
#include "usefulmacros.h"
char* prog;
int optv;
int main(){
prog = strdup(argv[0]);
optv = 4; // This would be parsed from # of "-v" in argv[]
return 0;
}
void functionA(){
int dumberror = 1;
V4("This is a fairly verbose error: %d",dumberror);
}
//file2.c
#include "usefulemacros.h"
extern char* prog;
extern int optv;
void functionB(){
int differror = 2;
V4("This is a different error: %d",differror);
}
//usefulmacros.h
#ifndef USEFULMACROS
#define V4(str, ...) if(optv >= 4){printf("%s: "str,prog,__VA_ARGS__);}
#endif
¿Qué tipo de advertencias está hablando aquí? ¿Adivinamos? –
En caso de que no lo haya escuchado, hay muy pocos trabajos para los cuales las macros son la mejor herramienta, y pueden causar muchos problemas. Por ejemplo, este 'COMMON_NUMBER' podría ser una variable global' const' (o mejor). – Beta
@JeffMercado: Actualicé mi pregunta con un mejor ejemplo que ilustra lo que está sucediendo en un sentido más específico. – Huckle