Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;?_C++_Xcode - Fatal编程技术网

C++ 如何在C++;?

C++ 如何在C++;?,c++,xcode,C++,Xcode,以下代码编译、链接和运行良好(在Xcode 5.1/clang上): #包括 类C{int foo();}; int main(int argc,const char*argv[] { C C; 也许可以尝试调用实现映射中的所有函数,并添加一个try-catch,如果它们出现故障,就会发出一些警告。有很好的理由说明它不容易实现。一组头文件可以声明许多函数,其中一些由附加库提供。您可能希望包含这样的头文件不使用所有这些函数的ers(例如,如果您只想使用一些#define-d常量) 或者,有一些头文

以下代码编译、链接和运行良好(在Xcode 5.1/clang上):

#包括
类C{int foo();};
int main(int argc,const char*argv[]
{
C C;

也许可以尝试调用实现映射中的所有函数,并添加一个try-catch,如果它们出现故障,就会发出一些警告。

有很好的理由说明它不容易实现。一组头文件可以声明许多函数,其中一些由附加库提供。您可能希望
包含这样的头文件不使用所有这些函数的ers(例如,如果您只想使用一些
#define
-d常量)

或者,有一些头文件并(在您的库中)只实现由头文件定义的API的子集是合法的

和C++或C头文件也可以定义潜在插件定义的代码接口,对于通常没有插件的程序来说。很多程序接受插件在其头文件中声明插件接口。


如果你真的想拥有这样的检查,你也许可以考虑定制GCC;但是,这样的检查是不重要的,目前要实现(并且你也需要链接时间优化)。

< P> <强> >你。< /强>或更确切地说,这不是编译器

的工作。 我想我只是在重复别人在评论中说的话,但是:

  • 它实际上是一个特性(参见未实现的私有构造函数)
  • 这真的没什么用,因为“臭虫”在提交代码之前,没有进行适当的代码清理,而未实现和未使用的函数实际上是最小的问题。那么所有其他未清理的东西呢?在我看来,实现和未使用函数的可能性同样高,或多或少都是一样的

<> P>而不是担心这个特定的情况,我会检查这是否只是一个时间故障,或者如果你的开发团队能够改进一些防止将来发生这种事情的程序。

< P> >对于C++等语言而言,检测和报告未定义的函数将击败提供的B的重要特征之一。虚拟/纯虚函数是C++实现运行时多态性的重要机制之一。
如果您正在开发供其客户端使用的库,您可能已经声明了虚拟函数,但没有定义虚拟函数。您可以将定义留给其客户端。在这种情况下,如果编译器报告此类未定义的函数,将不会有利。

也许静态分析工具可以做到这一点,但我不知道。当然有复杂的是,该定义有多个可能的来源。通常的做法是定义(私有)方法而不实现不允许复制(在C++03中,直到=删除)如果你不介意使用一个第三部分的工具,那么它看起来就像你想要的。在它检查的列表中,它包含了“代码>不必要的函数声明< /代码>。这是C++的版本。除非链接任何静态分析工具,链接器是唯一有兴趣检测这个的实体。但是,因为它只在它感兴趣的是将定义与引用这些定义的事物相链接,但它对检测它不感兴趣。因此,需要有其他人在林中。@Oxfordtnight我知道你是一个“实体”对此感兴趣。:-)我的意思是编译过程中没有人对它感兴趣,所以您需要求助于某种第三方工具(这可能不会告诉您任何您不知道的事情;我只是想确保每个人都对它有相同的看法。)事实上,这不是答案。此外,lint过程和静态分析工具通常可以配置为仅报告给定目录列表中文件的错误,从而忽略第三方依赖关系。这是一个有趣的问题。我可以看到这个问题(这意味着我必须始终链接到包含标题的库).这对于Boost来说是有问题的。不过-如果我愿意的话,最好能做些检查。Segfault是未定义行为的结果,而try catch无法捕获UB。
#include <iostream>

class C { int foo(); };

int main(int argc, const char * argv[])
{
    C c;
    cout << "Hello world!";
}