C语言中经常会出现文件重复包含而导致全局变量重复定义,下面以一个例子说明
-----Makefile
CC = gcc
OBJS = main.o errhandle.o strcopy.o
CFLAGS = -Wall -std=c99
main: ${OBJS} # or $(OBJS), ${OBJS} is shell style
${CC} ${CFLAGS} -o $@ ${OBJS}
main.o: main.c errhandle.h strcopy.h
${CC} ${CFLAGS} -c main.c
errhandle.o: errhandle.c errhandle.h
${CC} ${CFLAGS} -c errhandle.c
strcopy.o: strcopy.c strcopy.h errhandle.h
${CC} ${CFLAGS} -c strcopy.c
clean:
rm -f main *.o
-----main.c
#include <stdio.h>
#include "errhandle.h"
#include "strcopy.h"
#define DESTSIZE 10
int main(int argc, char *argv[])
{
char dest[DESTSIZE];
char *src = "1234567890";
if(strcopy(dest, DESTSIZE, src) != NULL)
{
printf("%s\n", dest);
}
else
{
printerr();
}
if(strcopy(dest, DESTSIZE, NULL) != NULL)
{
printf("%s\n", dest);
}
else
{
printerr();
}
return 0;
}
-----errhandle.h
/*
* error handle
*/
#ifndef _ERRHANDLE_H
#define _ERRHANDLE_H // to avoid duplicate(multiple) inclusion or declare(definition) of the header file
#ifdef __cplusplus
extern "C" {
#endif
extern int errcode;
#define ERR_SHORT 1 /* The dest string is too short */
#define ERR_SRCNULL 2 /* The src string pointer is NUL