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.
[C]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
unspecifiedwhetherpandqare pointing to the same string literal or not. In case ofgccthey both are pointing to"I am a string"(gcc optimizes your code) whereas inturbo cthey 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
[C++]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
documentshow the choice is madeAlso see this question.