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); // ???
}

如何解决这个问题?

4

2 回答 2

1

答案很简单。这是不支持的。C 和许多其他语言一样,不能绝对支持所有场景。提出这样的目标是不合理的。没有人试图实现这一目标。

在您的特定情况下,您应该重命名参数。函数的范围总是有限的。它总是作为一个整体重新编译。头文件中原型中的参数名称可能有不同的名称。在函数体中重命名参数将适用于 99.9999% 的情况。

于 2014-06-21T11:21:40.867 回答
1

在 C++ 中,您可以为对象定义命名空间,在您的示例中,您可以执行以下操作:

namespace MyFunctions {


    int f()
    {
        return 0;
    }
}

int main()
{
    int f = MyFunctions::f(); 
} 
于 2014-06-20T07:28:59.687 回答