L
Lighter
Is overriding a function of a library in accordance with C++ standard?
The following code are passed by the VS 2005 and Dev C++.
#include <cstdlib>
#include <iostream>
using namespace std;
size_t strlen(const char* p)
{
return 0;
} // !!! Note this !!! The standard library function strlen is
deliberately overriden.
int main(int argc, char *argv[])
{
system("PAUSE");
return EXIT_SUCCESS;
}
There is even no warning after compiling the code. In front of the
fact, I have to make a guess that all the C++ compilers are conformed
to the following rules:
1) The compiler first compiles all the source file included in the
project into object files;
2) At link time, the compiler first searches the object files for all
the unresolved symbols; if it fails to find some symbols, then the
compiler will search the libraries which are included in the project to
find the symbols.
3) If the object files containes a symbol, then the symbols that have
the same name in the libraries will be ignored.
Am I correct?
Any help will be appreciated. Many thanks in advance.
The following code are passed by the VS 2005 and Dev C++.
#include <cstdlib>
#include <iostream>
using namespace std;
size_t strlen(const char* p)
{
return 0;
} // !!! Note this !!! The standard library function strlen is
deliberately overriden.
int main(int argc, char *argv[])
{
system("PAUSE");
return EXIT_SUCCESS;
}
There is even no warning after compiling the code. In front of the
fact, I have to make a guess that all the C++ compilers are conformed
to the following rules:
1) The compiler first compiles all the source file included in the
project into object files;
2) At link time, the compiler first searches the object files for all
the unresolved symbols; if it fails to find some symbols, then the
compiler will search the libraries which are included in the project to
find the symbols.
3) If the object files containes a symbol, then the symbols that have
the same name in the libraries will be ignored.
Am I correct?
Any help will be appreciated. Many thanks in advance.