Yixuan Huang <yixuan...@gmail.com> writes:

> I have encountered one issue when write a simple test code.
> #inlcude <iostream>
> int main{
>   const char* str = "aaaa";
>   std::cout<<"str len: "<<strlen(str)<<std::endl;
>  return 0;
> }
>
> If I compile on gcc version 4.1.2 20070115 (SUSE Linux), it can be
> compiled successfully. Otherwise, on gcc version 4.3.2 [gcc-4_3-branch
> revision 141291] (SUSE Linux), it will show
> linux-lht2:/home/yixuan # g++ aa.cpp
> aa.cpp: In function ‘int main()’:
> aa.cpp:6: error: ‘strlen’ was not declared in this scope
>
> I don't know where can I get the information to explain the different 
> behavior?

This message is not appropriate for the mailing list gcc@gcc.gnu.org.
It would be appropriate for gcc-h...@gcc.gnu.org.  Please take any
followups to gcc-help.  Thanks.

gcc 4.3 is more careful about having one C++ header file include
another.  The function strlen is defined in <string.h>.  In gcc 4.1
<iostream> #include'd <string.h>.  In gcc 4.3 it does not.

This is briefly mentioned at http://gcc.gnu.org/gcc-4.3/changes.html:
   "Header dependencies have been streamlined, reducing unnecessary
    includes and pre-processed bloat."

Ian

Reply via email to