Случайно, я написал следующий интересный фрагмент:
#include <iostream>
#include <cstring>
size_t strlen(const char* str) {
std::cout << "hello";
return 0;
}
int main() {
return std::strlen("sdf");
}
Неожиданно для меня вывод "hello" в GCC 5.1, что означает, что вызывается мой strlen
. Еще более интересно, если я удалю return
, т.е. Заменим main только вызовом std::strlen("sdf");
, ничего не будет напечатано!
Я также пробовал Clang, для которого std::strlen
вызывает реальную функцию, которая вычисляет длину строки (и ничего не печатается). Это то, что я ожидал увидеть.
Как это можно объяснить? Является ли определение моей собственной функции strlen
рассмотренной поведением undefined?