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.

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.

Jennifer

>>...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.

Attachments: 

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

Leave a Comment

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