Focus on Sun
Re: Sun Studio 11: C++ 5.8 Compiler Apr 17 2007 06:53AM
Jonathan Leffler (jleffler us ibm com)
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 (at) us.ibm (dot) com [email concealed])
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!"

[ reply ]


 

Privacy Statement
Copyright 2010, SecurityFocus