Why is there a difference in the output produced when the code is compiled using the two compilers GCC and Turbo C.
#include <stdio.h>
int main()
{
char *p = "I am a string";
char *q = "I am a string";
if(p==q)
{
printf("Optimized");
}
else{
printf("Change your compiler");
}
return 0;
}
I get Optimized
on GCC and Change your compiler
on Turbo C. Why?
Your questions has been tagged C as well as C++. So I'd answer for both the languages.
From ISO C99 (Section 6.4.5/6)
It is unspecified whether these arrays are distinct provided their elements have the appropriate values.
That means it is unspecified whether p
and q
are pointing to the same string literal or not. In case of gcc they both are pointing to "I am a string"
(gcc optimizes your code) whereas in Turbo C they are not.
Unspecified Behavior: Use of an unspecified value, or other behavior where this International Standard provides two or more possibilities and imposes no further requirements on which is chosen in any instance
From ISO C++-98 (Section 2.13.4/2)
Whether all string literals are distinct(that is, are stored in non overlapping objects) is implementation defined.
In C++ your code invokes Implementation defined behaviour.
Implementation-defined Behavior: Unspecified Behavior where each implementation documents how the choice is made
Also see this question.