Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com From: "Alan Cooley" To: Subject: gcc - static pointer initialization problem Date: Thu, 7 Aug 2003 16:00:39 -0500 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0004_01C35CFD.0BF988D0" X-Priority: 3 (Normal) X-MSMail-Priority: Normal Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 Note-from-DJ: This may be spam ------=_NextPart_000_0004_01C35CFD.0BF988D0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Hello, I am having a problem with a C program. It appears that static variables are not being initialized when in an object file. The program compiles and links fine but funcPtrStruct.ptr is null so program crashes. This program works using gcc on Linux and (as I understand the C language) should work anywhere. Thanks in advance for any explanation/corrections you can provide. Alan. ---------------- Files attached: gccversion.txt - output of "gcc -v" Makefile - 'nuf said static_function_ptr_def.h - header for structure to hold function ptr static_function_ptr_def.c - implementation with static initializer static_function_ptr.c - main that invokes the function ------=_NextPart_000_0004_01C35CFD.0BF988D0 Content-Type: text/plain; name="gccversion.txt" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="gccversion.txt" Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/3.2/specs=0A= Configured with: /netrel/src/gcc-3.2-3/configure = --enable-languages=3Dc,c++,f77,java --enable-libgcj = --enable-threads=3Dposix --with-system-zlib --enable-nls = --without-included-gettext --enable-interpreter = --disable-sjlj-exceptions --disable-version-specific-runtime-libs = --enable-shared --build=3Di686-pc-linux --host=3Di686-pc-cygwin = --target=3Di686-pc-cygwin --enable-haifa --prefix=3D/usr = --exec-prefix=3D/usr --sysconfdir=3D/etc --libdir=3D/usr/lib = --includedir=3D/nonexistent/include --libexecdir=3D/usr/sbin=0A= Thread model: posix=0A= gcc version 3.2 20020927 (prerelease)=0A= ------=_NextPart_000_0004_01C35CFD.0BF988D0 Content-Type: application/octet-stream; name="Makefile" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="Makefile" CFLAGS =3D -g=0A= EXT =3D .exe=0A= =0A= PROGS =3D static_function_ptr$(EXT)=0A= =0A= all: $(PROGS)=0A= =0A= static_function_ptr$(EXT): static_function_ptr_def.o = static_function_ptr.o=0A= $(CC) -o $@ static_function_ptr_def.o static_function_ptr.o $(LDFLAGS)=0A= =0A= clean:=0A= rm -f $(PROGS)=0A= rm -f *.o=0A= rm -f *.stackdump=0A= =0A= clean_editor:=0A= rm -f *~ *#=0A= =0A= clean_all: clean clean_editor=0A= =0A= =0A= ------=_NextPart_000_0004_01C35CFD.0BF988D0 Content-Type: application/octet-stream; name="static_function_ptr_def.h" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="static_function_ptr_def.h" #ifndef STATIC_FUNCTION_PTR_DEF_H=0A= #define STATIC_FUNCTION_PTR_DEF_H=0A= =0A= typedef void (*myFuncPtr) ();=0A= =0A= typedef struct {=0A= myFuncPtr ptr;=0A= } funcPtrStructDef;=0A= =0A= static funcPtrStructDef funcPtrStruct;=0A= =0A= #endif=0A= ------=_NextPart_000_0004_01C35CFD.0BF988D0 Content-Type: application/octet-stream; name="static_function_ptr_def.c" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="static_function_ptr_def.c" #include "static_function_ptr_def.h"=0A= =0A= void func() {=0A= printf("Here I am.\n");=0A= }=0A= =0A= static funcPtrStructDef funcPtrStruct =3D {func}; =0A= =0A= ------=_NextPart_000_0004_01C35CFD.0BF988D0 Content-Type: application/octet-stream; name="static_function_ptr.c" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="static_function_ptr.c" /* =0A= Test behavior of static function pointers with gcc in Win=0A= */=0A= #include =0A= #include "static_function_ptr_def.h"=0A= =0A= int main() {=0A= =0A= printf("Try function directly...\n");=0A= func();=0A= =0A= printf("Try function via ptr...\n");=0A= funcPtrStruct.ptr();=0A= =0A= printf("Bye!\n");=0A= }=0A= =0A= =0A= ------=_NextPart_000_0004_01C35CFD.0BF988D0 Content-Type: text/plain; charset=us-ascii -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ------=_NextPart_000_0004_01C35CFD.0BF988D0--