Initialization of arrays

Initialization of arrays

I've encountered a wierd problem. When I was doing:

double p[]={1.d, 2.d, 3.d, 4.d, 5.d};//or even double p[5] = blahblahblah...

And then I made a for loop to check the values of array p, I got all zeros. This is a problem that I abstract during the debugging. In fact, this happens   when I use icc or icpc to compile, on the contrary, the it truns out that everything is fine with gcc or g++. I'm so confused...

I'm using icc version 13.1.0. 

Thank you for your comments!

4 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

As far as I know, a "d" suffix is not standard for floats. Use one of:

  • "f" or "F" for "float"
  • "l" or "L" for "long double"
  • (nothing) for "double"

This must be GCC's extension to the standard.

With best regards,
If you find my post helpful, please rate it and/or select it as a best answer where applies. Thank you.

changing ".d" to ".f" does work around the issue.

Not sure since which version of gcc that accepts the ".d". But I'll file a ticket for it.


>>...double p[] = { 1.d, 2.d, 3.d, 4.d, 5.d };

This is clearly Non standard specificator and if portability is important it shouldn't be used. Why don't you want to use L instead?

Please take a look at attached test case with verifications for Intel and Borland C++ compilers.


Downloadtext/x-c++src test.cpp2.09 KB

Leave a Comment

Please sign in to add a comment. Not a member? Join today