[英]C vs C++ using cl compiler in VS2015
cl编译器如何知道我是在编译C还是C ++代码?
我需要告诉编译器吗?
我正在用完VS2015的Developer Command Prompt。 我最初使用在RedHat Linux PC上编译和运行的c ++代码启动了这个项目。 我将它移动到WIN7并且它不会在cl编译器下编译,除非我摆脱了c ++构造并实现了C等价物。
头文件中的构造函数是我必须解决的问题之一。
如MSDN中所述 ,它首先查看文件扩展名。 如果是.cpp或.cxx则默认为C ++编译。 几乎总是足以完成工作。 同一页面还显示了如何强制选择,使用/ Tc表示C和/ Tp表示C ++。 您将使用/ TC和/ TP强制它为所有源文件。
文件扩展名将提供该信息。
用于C ++的C和.cpp
文件的.c
文件。 请查看此链接了解详情。
此外,我在这里发现此代码显示使用了C
或C++
编译器:
下面的代码包含运行时使用的标准预定义宏,用于确定是否使用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开发环境中设置此编译器选项
还有一个例子,也来自文档。
以下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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.