Re: Sun Studio 11: C++ 5.8 Compiler



focus-sun Digest 16 Apr 2007 17:18:39 -0000 Issue 372

Sun Studio 11: C++ 5.8 Compiler
1456 by: neelabhsharma1.gmail.com

[...]

As per the specifications the compiler should be based on C99. But i think
it still does not handle the function call strtoll(). This issue did not
arise with RHL 9.0

If it did the handling properly then the result of the program should not
be 0.


/*Snippet of the Code */
#include<stdio.h>
#include<stdlib.h>

int main()
{
char *a = "89abcdef";
long long int c;
a[8] = '\0';
c = strtoll(a, NULL, 16);
printf("the num is %8x", c);
return 0;
}


My understanding of the OS, Platform (SPARC), ofcourse C is just of a
beginner and am eager to learn, please provide supporting comments..



[JL:
Did you say C or C++? C++ is still based on the 1998 C++ standard, which
in turn is based on C90 and not on C99. Hence things like long long are
(most likely) not part of the base C++ configuration - it is likely that
you would have to enable such extensions in C++ by special options. {That
was a guess - investigation shows it is a wrong guess...read on.}

Which bits of the manual did you read?

Tested on Solaris 10 with
Black JL: cc -V
cc: Sun C 5.8 2005/10/13
usage: cc [ options] files. Use 'cc -flags' for details
Black JL: CC -V
CC: Sun C++ 5.8 2005/10/13

Also, the code must be fixed - %8x prints an integer, not a long long int,
so the format string needs to end "%8llx\n".

The C compiler is fine with the fixed code. The C++ compiler says:

CC -O x.c -o x && ./x
"x.c", line 6: Warning: String literal converted to char* in
initialization.
1 Warning(s) detected.
Segmentation Fault(coredump)

Hmmm...that's because you try to modify the string literal at x[8] = '\0'
- which is a pointless exercise (the value is already '\0'). The warning
is because it should be a const char * you assign to. With that fixed,
even CC compiles it and runs it OK.

So, you don't even have to enable long long in CC - it just works with
correct code.
]


--
Jonathan Leffler (jleffler@xxxxxxxxxx)
STSM, Informix Database Engineering, IBM Information Management Division
4100 Bohannon Drive, Menlo Park, CA 94025-1013
Tel: +1 650-926-6921 Tie-Line: 630-6921
"I don't suffer from insanity; I enjoy every minute of it!"



Relevant Pages

  • Re: Requesting advice how to clean up C code for validating string represents integer
    ... Or whatever the GNU C compiler uses when the -ansi switch is turned ... -ansi Support all ANSI standard C programs. ... Please tell me whether GNU C MAN pages are referring to C99 or what? ...
    (comp.lang.c)
  • Re: any error in the code
    ... Error("Could not allocate the memory\n"); ... or with any other compiler for C. Compare it to the following: ... int if you don't have a C99 ... With a C99 compiler your ...
    (comp.lang.c)
  • Re: Storgae durations
    ... whether C99 is the "current" standard depends on what ... gcc is *close* to being a C99 compiler, but it isn't actually there yet. ... That's precisely what "conforming" means. ... The function won't always invoke undefined behavior, ...
    (comp.lang.c)
  • Re: const array declaration
    ... [I snipped some gcc diagnostics from a previous poster here] ... outside the C code changes it, so that the compiler cannot simply ... "b" are thus not at all constants, but C99 accepts this, just as ... In C89, all aggregate initializers ...
    (comp.lang.c)
  • Re: MISRA-C:2010 (version 3)
    ... However, after re-reading the standard, I now understand that C90 ... and C99 can be seen as performing the same function. ... I can to the wrong conclusion when I can across a broken C90 compiler ... that evaluated the constant_expression as an int and I mis-read the ...
    (comp.lang.c)