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 :(得分:1)
在C ++中,您可以为对象定义命名空间,在您的示例中,您可以这样做:
namespace MyFunctions {
int f()
{
return 0;
}
}
int main()
{
int f = MyFunctions::f();
}
答案 1 :(得分:1)
答案很简单。这不受支持。 C,和许多其他语言一样,不能完全支持所有场景。实现这样一个目标是不合理的。没有人试图实现这一目标。
在您的特定情况下,您应该重命名参数。功能的范围有限。它总是被重新编译成一个整体。头文件中原型中的params名称可能具有不同的名称。在函数体中重命名param将在99.9999%的情况下工作。