initializer is not a constant error ??

D

David Green

Ok, i'm a real c n00b but i needed a piece of code for some work i was
doing. Initially i was running the stuff under linux and using gcc to
compile the c code and it worked fine but now i need to port it to
windows and when i try to compile the same code with the visual studio
command line tool "cl" i get this error:

const.c(92) : error C2099: initializer is not a constant
const.c(97) : error C2099: initializer is not a constant

with the relevant lines of the const.c code being:

ln 92 double INFINITY = 1.0/0.0; /* 99e999; */
ln 97 double NAN = 1.0/0.0 - 1.0/0.0;

Now i have no real idea what this is doing so i was wondering why i
compiles fine uner gcc but not under windows, oh the command i am
using is:

cl /c const.c

Is there a compile option i need to set or will i have to change the
code?

Any help would be great, thanx.

Dave.
 
B

Ben Pfaff

const.c(92) : error C2099: initializer is not a constant
const.c(97) : error C2099: initializer is not a constant

with the relevant lines of the const.c code being:

ln 92 double INFINITY = 1.0/0.0; /* 99e999; */
ln 97 double NAN = 1.0/0.0 - 1.0/0.0;

Both of these invoke undefined behavior due to division by zero.
Maybe that's why the compiler regards them as not being constant
expressions. I can't think of another reason right now.

If your implementation has a C99-compliant <math.h>, you can just
#include <math.h> to get ready-made macros for these.
 
K

Kevin Goodsell

Ben said:
Both of these invoke undefined behavior due to division by zero.
Maybe that's why the compiler regards them as not being constant
expressions. I can't think of another reason right now.

If your implementation has a C99-compliant <math.h>, you can just
#include <math.h> to get ready-made macros for these.

He did mention that he's using Visual C, which does not (to the best of
my knowledge) support C99 (though it apparently supports it in some
ways, and it's certainly possible that this is one of them).

To the best of my knowledge, outside of C99 there is not a portable way
to generate INF and NAN. But there's probably a system-specific way. I'd
recommend checking the documentation for a function or a predefined
constant.

-Kevin
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top