Date: Tue, 27 Jan 2009 14:21:02 +0100 From: Luigi Rizzo <rizzo@iet.unipi.it> To: current@freebsd.org Subject: duplicate typedefs and system headers ? Message-ID: <20090127132102.GA21574@onelab2.iet.unipi.it>
next in thread | raw e-mail | index | archive | help
In a recent commit tp sbin/ipfw, in an attempt to avoid a large set of header deependencies, i put a 'forward typedef' declaration in a common header, duplicating something that is in a system header: ipfw2.h: typedef struct _ipfw_insn ipfw_insn; netiinet/ip_fw2.h typedef struct _ipfw_insn { /* template for instructions */ ... } ipfw_insn; Sources including both ipfw2.h and /usr/include/netinet/ip_fw2.h However if the duplication occurs in two non-system files, the compiler produces an error for a duplicate typedef. Now i wonder, is there any compiler option to turn off the check for duplicate typedefs also for non-system headers ? BTW the behaviour with duplicate typedefs is curious, you can try this for yourself with a simple example involving e.g. /usr/include/sha.h : make a copy of the file in userspace, and then you can try the following (SHA_CTX is typedef'ed in sha.h --- ok --- typedef struct SHAstate_st SHA_CTX; #include <sha.h> --- ok --- #include <sha.h> typedef struct SHAstate_st SHA_CTX; --- error --- #include "sha.h" typedef struct SHAstate_st SHA_CTX; --- error --- typedef struct SHAstate_st SHA_CTX; #include "sha.h" --- ok (this is surprising to me) -- typedef struct SHAstate_st SHA_CTX; #include <sha.h> typedef struct SHAstate_st SHA_CTX; As you note, it looks like a typedef in a system header removes the error message for duplicates both before and after. cheers luigi
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090127132102.GA21574>