防止全局变量、头文件重复包含与 extern 的使用

本文介绍了如何在C语言中避免因头文件重复包含导致全局变量重复定义的问题,通过extern关键字的使用以及宏定义的方式进行控制,确保程序的正确性。同时,提及了在errhandle.h和errhandle.c中应用这些方法的具体实践。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值