Следующий код не может быть скомпилирован с помощью VC ++ и clang.
int f()
{
return 0;
}
int main()
{
// error : called object type 'int' is not a function or function pointer
int f = f();
}
Это необходимо в некоторых случаях. Например, у меня есть функция для вычисления количества символов строки, которая называется count
однако другой параметр функции также явно называется count
,
size_t count(char* sz)
{
return strlen(sz);
}
bool check_count(char* sz, size_t count)
{
return count == count(sz); // ???
}
Как решить эту проблему?
В C ++ вы можете определить пространство имен для ваших объектов, в вашем примере вы можете сделать:
namespace MyFunctions {int f()
{
return 0;
}
}
int main()
{
int f = MyFunctions::f();
}
Ответ прост. Это не поддерживается C, как и многие другие языки, не может поддерживать абсолютно каждый сценарий. Неразумно ставить такую цель. Никто никогда не пытался добиться этого.
В вашем конкретном случае вы должны переименовать ваш параметр. Функция всегда имеет ограниченную область применения. Он всегда перекомпилируется как единое целое. Имена параметров в прототипах в заголовочных файлах могут иметь разные имена. Переименование параметра в теле функции сработает в 99,9999% случаев.