标准库标识符与用户标识符冲突
Standard library identifiers conflict with user identifiers
我正在尝试在 64 位 Win10 系统上使用 VS2017 从命令行编译/链接名为 test.cpp 的文件。 我使用这两个命令:
"C:Program Files (x86)Microsoft Visual Studio2017EnterpriseVCAuxiliaryBuildvcvars64.bat"
cl test.cpp
我得到以下结果:
C:temptests>"C:Program Files (x86)Microsoft Visual
Studio2017EnterpriseVCAuxiliaryBuildvcvars64.bat"
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.4.5
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
C:temptests>cl test.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25547 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
test.cpp
test.cpp(2): error C2365: 'y1': redefinition; previous definition was 'function'
C:Program Files (x86)Windows
Kits10include10.0.16299.0ucrtcorecrt_math.h(984): note: see declaration of 'y1'
test.cpp(5): error C2659: '=': function as left operand
我的文件包含以下代码:
#include <new>
static int *y1;
int main()
{
y1 = new (std::nothrow) int;
}
虽然我理解为什么会发生这种情况以及可以修复它的任意数量的 kluge,但在我看来,实际缺陷在 Microsoft corecrt_math.h 头文件中。 当我看到那里时,我看到了更多的标识符(j0,jn,jn等(,这些标识符可以很容易地被毫无戒心的程序员合法选择,但最终会遇到同样的问题。 我的印象是,有一个"君子协议",即在库代码中暴露未记录的标识符将以下限开始或结束,而用户代码不会,只是为了避免这种类型的问题。
这个构建命令对我有用:
cl foo.cpp/Feb/D _CRT_DECLARE_NONSTDC_NAMES=0
相关文章:
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 使用用户定义函数的字符串反转
- #ifdef和未声明的标识符
- 用户定义函数中的指针和输入
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 在C++中,我如何接受不同于同一行的用户输入
- 当用户超过按钮点击限制时报告
- Visual C++(VS2017)中用户定义的转换不明确
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 标准库标识符与用户标识符冲突
- 用户创建的类对象实例化的未申请标识符