【问题标题】:How to judge whether a project is a c or c++ project?如何判断一个项目是c还是c++项目?
【发布时间】:2010-09-13 13:43:38
【问题描述】:
wprintf(L"Selecting Audio Input Device: %s\n", 
                            varName.bstrVal);
if(0 == wcscmp(varName.bstrVal, L"IP Camera [JPEG/MJPEG]"))
{
    ...
}

hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,
                        IID_IBaseFilter, (void **)&pGrabberF);

以上来自一个 .cpp 文件,但正如你所见,它的内容很 c 风格。

你会称它为 c 或 c++ 项目吗?

【问题讨论】:

  • 任何人都可以从 C++ 文件中获取类似 C 的 sn-p。根据这几行是不可能确定的。是否有任何课程被删除或使用?是否正在使用模板?正在使用任何 C++ 特定库吗?回答这些问题会对您有更多帮助。
  • 没有使用类和模板。对于第三个问题,请定义 C++ 特定库...
  • 我在这里没有看到一个连贯的问题。我怎么称呼它有什么关系?
  • wprintf() 是说它的 c++
  • @fahad,除非你有理由,否则大多数人不会同意。

标签: c++ c


【解决方案1】:

这完全取决于你如何编译它。

有些代码可以同时编译,如果它被 C++ 编译器编译,它被认为是 C++ 代码。

顺便说一句C is NOT an exact subset of C++

通常你可以通过文件的扩展名快速地推断出来,尽管可以将 C 代码放在 .cc 扩展名或 .cpp 扩展名中,你也可以将 C++ 代码放在 .c 扩展名中,但这会是非常罕见。

【讨论】:

  • 在我看来,Visual Studio 对 c 和 c++ 使用相同的编译器,不是吗?
  • @COMer:在大多数情况下。如果你使用 .c ,尽管它会编译为 C,并允许来自 void* 的隐式转换。
  • 我在帖子中多加了一行,现在呢?
  • @COMer:是的,您仍然可以将其称为 C++ 项目。 Win32 API 是为与 C 一起工作而构建的,您也可以使用 C++。
  • 你的意思是所有的Win32 API都可以在c和c++中使用?
【解决方案2】:

我将其称为 C 项目,因为通过 C++ 中的原始指针使用 C 风格的字符串比较,我不会被抓到死。异常或其他东西会消灭该代码。正确的解决方案是将 bstrVal 更改为 BSTR 类,该类对 wchar_t* 具有 operator== 重载。

【讨论】:

  • BSTR 不是一个类,它是一个类型 (OLECHAR*)。您是说 _bstr_t 还是 CComBSTR?
  • 这就是为什么我建议将其更改为 RAII 自释放运算符重载类。
【解决方案3】:

我会说这取决于链接。如果它是一个旨在可链接 C 的库,它就是 C。如果它需要 C++ 链接,它就是 C++。如果它同时提供这两个选项,那么两者都是。

但是,如果它不是库,并且需要 C++ 编译器来构建,那么它就是 C++ 项目。

更新0

这仍然是一个链接问题。您提供的代码将在 C 和 C++ 下编译。

【讨论】:

  • 我在帖子中多加了一行,现在呢?
猜你喜欢
  • 2018-08-24
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多