gpt4 book ai didi

c++ - 严格标准-符合Visual C++

转载 作者:行者123 更新时间:2023-11-30 04:24:53 25 4
gpt4 key购买 nike

这个问题与以下任何一个都不一样:

我正在运行 Windows 7 和 Visual Studio Express 2012,但我预计这两者都不会影响这个问题的答案。

tl;dr 在仍然允许使用 Visual C++ 进行编译的情况下,我如何最恰本地抵消/防止/容忍以下来自 math.h 的摘录的影响?

#if     !__STDC__

/* Non-ANSI names for compatibility */

#define DOMAIN _DOMAIN
#define SING _SING
#define OVERFLOW _OVERFLOW
#define UNDERFLOW _UNDERFLOW
#define TLOSS _TLOSS
#define PLOSS _PLOSS

#define matherr _matherr

背景:我正在编写一个基于业余爱好的基于文本的 C++ 项目,其总体目标远远超出了这个问题的范围。我正在使用 GNU Make(为了熟悉性和可移植性)用 Cygwin g++ 和 cl.exe 编译它,并假设一个严格符合标准的环境......到目前为止。我开始认为 Windows 根本不允许这样的假设。

我有一个枚举,其成员包括 OVERFLOWUNDERFLOW .下面描述的问题可能会迫使我更改这些名称,但我宁愿保留它们,因为它们最适合我的目的,尽管有 Windows 头文件等外部影响。

GCC、Visual C++ 和 Mac OS X 的头文件(独立于 llvm-gcc)都定义了 OVERFLOWUNDERFLOW ,以及其他非标准宏,默认在 math.h 中。

  • GCC 有 a selection明确防止这些定义的记录方法。
  • Mac OS X 有几个未记录的方法来做同样的事情,其中​​之一 ( _POSIX_C_SOURCE ) 与 GCC 的文档一致。 (我提到这一点是为了弥补 Apple 缺乏文档的不足;我有使用这些标识符的历史。)
  • MSDN documents/u 命令行选项作为一种手段(通过 __STDC__ 宏)阻止 a few 的定义non-standard macros在 Visual C++ 中。如本问题开头所示,__STDC__ 阻止了 OVERFLOW 的定义和 UNDERFLOW .

在发现/u 开关会阻止我关心的定义时,我将它添加到我的 makefile 中。但是后来我从 crtdefs.h 的第 44 行得到了一个新的错误:

error C1189: Only Win32 target supported!

这是因为 _WIN32不再定义。一些搜索表明 crtdefs.h 与 Windows 驱动程序开发工具包有关。我不是在开发驱动程序;我可以不使用那个标题吗?或者我是否只需要重命名我的枚举成员以容忍非标准的 Windows 行为?

最佳答案

而不是使用 /u 编译器开关,它有 multiple effects ,只需使用 /D__STDC__=1 即可定义 __STDC__ 宏,仅此而已。

关于c++ - 严格标准-符合Visual C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12469577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com