Как назвать функцию и переменную с тем же именем?

Следующий код не может быть скомпилирован с помощью 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); // ???
}

Как решить эту проблему?

0

Решение

В C ++ вы можете определить пространство имен для ваших объектов, в вашем примере вы можете сделать:

namespace MyFunctions {int f()
{
return 0;
}
}

int main()
{
int f = MyFunctions::f();
}
1

Другие решения

Ответ прост. Это не поддерживается C, как и многие другие языки, не может поддерживать абсолютно каждый сценарий. Неразумно ставить такую ​​цель. Никто никогда не пытался добиться этого.

В вашем конкретном случае вы должны переименовать ваш параметр. Функция всегда имеет ограниченную область применения. Он всегда перекомпилируется как единое целое. Имена параметров в прототипах в заголовочных файлах могут иметь разные имена. Переименование параметра в теле функции сработает в 99,9999% случаев.

1

По вопросам рекламы [email protected]