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

0

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

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

  • 7
    Используйте другое имя для двух предметов.
  • 5
    ::f() , но на самом деле не делайте этого.
Показать ещё 2 комментария
Теги:
function
parameters

2 ответа

1

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

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

1

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

namespace MyFunctions {


    int f()
    {
        return 0;
    }
}

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню