4

cl 编译器如何知道我是在编译 C 代码还是 C++ 代码?
我需要告诉编译器吗?
我用完了 VS2015 的开发人员命令提示符。我最初使用在 RedHat Linux PC 上编译和运行的 c++ 代码开始了这个项目。我将它移至 WIN7,除非我摆脱 c++ 结构并实现 C 等效项,否则它不会在 cl 编译器下编译。
头文件中的构造函数是我必须解决的问题之一。

4

2 回答 2

5

MSDN中所述,它首先查看文件扩展名。如果是 .cpp 或 .cxx 则默认为 C++ 编译。几乎总是足以完成工作。该页面还显示了如何强制选择,对 C 使用 /Tc,对 C++ 使用 /Tp。您将使用 /TC 和 /TP 强制所有源文件使用它。

于 2015-09-10T15:30:25.243 回答
4

文件扩展名将提供该信息。

.cC.cpp文件和 C++ 文件。检查此链接以获取详细信息。

另外,我在这里找到了这段代码来显示是否使用了 aCC++编译器:

下面的代码包含在运行时用于确定是使用 C 还是 C++ 编译器来编译代码的标准预定义宏。对于 C 编译器,它还决定了编译器实现的 C 语言标准的版本)。注意:有些人更喜欢使用 STDC_HEADERS 而不是STDC ..

#ifdef __cplusplus
 printf("C++ compiler\n");
#else
#ifdef __STDC__
#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) ||/*continue..
    ...on the next line */ (defined(__GNUC__) && !defined(__STRICT_ANSI__))
 printf("ANSI X3.159-1999 / ISO 9899:1999 (C99) compiler\n");
#else
 printf("ANSI X3.159-1989 (C89) / ISO/IEC 9899:1990 (C90) C compiler\n");
#endif
#else
 printf("Pre-ANSI (K&R) C compiler\n");
#endif
#endif

下面的代码确定在运行时是使用 C 还是 C++ 编译器来编译代码:

if (sizeof('c') != sizeof(int)) printf("C++ compiler\n");
else if ((unsigned char)1 < -1) printf("Pre-ANSI (K&R) C compiler\n");
else { int i;   i = 1 //* */
 +1;
if (i == 2) printf("ANSI X3.159-1999 / ISO 9899:1999 (C99) compiler\n");
else printf("ANSI X3.159-1989 (C89) / ISO/IEC 9899:1990 (C90) C compiler\n");}

只是不要完全依赖链接,这是来自文档的信息:

评论

默认情况下,CL 假定扩展名为 .c 的文件是 C 源文件,扩展名为 .cpp 或 .cxx 的文件是 C++ 源文件。当指定 TC 或 Tc 选项时,将忽略 /Zc:wchar_t(wchar_t 是本机类型)选项的任何规范。在 Visual Studio 开发环境中设置此编译器选项

  1. 打开项目的属性页对话框。有关详细信息,请参阅如何:打开项目属性页。
  2. 单击C/C++文件夹。
  3. 单击高级属性页。
  4. 修改编译为属性。

还有一个例子,也取自文档。

以下 CL 命令行指定 TEST1.c、TEST2.cxx、TEST3.huh 和 TEST4.o 编译为 C++ 文件,而 TEST5.z 编译为 C 文件。

CL TEST1.C TEST2.CXX TEST3.HUH TEST4.O /Tc TEST5.Z /TP
于 2015-09-10T15:08:49.143 回答