Я пытаюсь скомпилировать / связать мой файл с именем test.cpp из командной строки, используя VS2017 в 64-битной системе Win10.Я использую эти две команды:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cl test.cpp
и получаю следующие результаты:
C:\temp\tests>"C:\Program Files (x86)\Microsoft Visual
Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.4.5
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
C:\temp\tests>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
Kits\10\include\10.0.16299.0\ucrt\corecrt_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;
}
Пока я понимаюпочему это происходит, и любое количество клугов, которые это исправят, мне кажется, что фактический дефект находится в заголовочном файле Microsoft corecrt_math.h.Когда я смотрю туда, я вижу еще несколько идентификаторов (j0, jn, jn и т. Д.), Которые так же легко могут быть легитимно выбраны ничего не подозревающим программистом только для того, чтобы в конечном итоге столкнуться с той же проблемой.У меня сложилось впечатление, что было «джентльменское соглашение», которое раскрывало недокументированные идентификаторы в библиотечном коде, начиналось или заканчивалось подчеркиванием, а пользовательский код - нет, просто чтобы избежать подобных проблем.