[GRASS-dev] Re: is `initialized' initialized in HTML_Driver ()?

Ivan Shmakov ivan at theory.asu.ru
Mon Oct 13 12:03:04 EDT 2008


>>>>> Glynn Clements <glynn at gclements.plus.com> writes:

 >>> Doesn't C require an explicit initial value for `initialized' here?
 >>> Well, as it is a static variable it will be initialised to zero.

 >> Oh, never knew C has such a feature.  (Still, it may make sense to
 >> add an explicit initializer for the sake of clarity.)

 > If you add an explicit initialiser, the variable will be placed in
 > the data segment.

 > Variables which are implicitly initialised to "zero" (i.e. any global
 > variables and "static" local variables lacking an explicit
 > initialiser) are placed in the BSS segment. As the entire BSS segment
 > is zero, its contents don't need to be stored in the resulting binary
 > file.

	Is this behavior mandated by some standard?

	It seems not a very smart decision to require such things.  At
	least, gcc does, in my opinion, the right thing and puts the
	static variable initialized to zero (either explicitly or
	implicitly) to BSS:

$ diff -u foo[12].c 
--- foo1.c	2008-10-12 22:54:02.281519397 +0700
+++ foo2.c	2008-10-13 22:51:21.117012403 +0700
@@ -1,7 +1,7 @@
 int
 main ()
 {
-  static int a;
+  static int a = 0;
 
   return a;
 }
$ make CC=gcc foo1 foo2 
gcc     foo1.c   -o foo1
gcc     foo2.c   -o foo2
$ nm foo1 | grep -F ' b ' 
00000000005007c4 b a.1609
00000000005007c0 b completed.5959
$ nm foo2 | grep -F ' b ' 
00000000005007c4 b a.1609
00000000005007c0 b completed.5959
$ diff -u <(gcc -o - -S foo{1,2}.c) 
--- /proc/self/fd/63	2008-10-13 22:59:42.420439493 +0700
+++ /proc/self/fd/62	2008-10-13 22:59:42.401668748 +0700
@@ -1,4 +1,4 @@
-	.file	"foo1.c"
+	.file	"foo2.c"
 	.local	a.1609
 	.comm	a.1609,4,4
 	.text
$ 

	Of course, if there are the compilers that produce different
	results in these cases, it may make sense to leave the code in
	its present state.


More information about the grass-dev mailing list