我收到以下消息试图编译一些简单的代码:MSB6006 "CL.exe" exited with code 2
。
我正在努力学习 C++。我知道一些 C。我知道这两种语言是完全不同的语言。我包含了这两个标签,因为根据我尝试编译代码的方式,我会得到不同的结果。
为了我自己的教育,我正在尝试编写一个词法分析器。主要问题似乎出在这个函数上:
word scan(char** source)
{
word w;
w.lexeme[0] = '\0';
return w;
}
我遇到了与MSB6006相同的问题:“CL.exe”以代码 2 退出,但答案不适用于我的情况。我看到这个问题错误 MSB6006: "CL.exe" exited with code 2指向MSDN 站点上的这个问题他们似乎表明小问题可能导致此错误代码。
我有两个文件。一个是“驱动程序”,另一个是词法分析器代码。但是如果我将所有内容都包含在一个文件中,我会得到完全相同的结果。
这是驱动程序的代码:
#include "pch.h"
#include "Cl2aDLL.h"
void Cl2a(char argv1[], char argv2[])
{
char** source = NULL;
scan(source);
}
这是标题的代码。我从 MSFT 网站的某个地方获得了该技术:
#pragma once
#ifndef CL2ADLL__H__
#define CL2ADLL__H__
typedef struct {
char* lexeme;
}word;
#ifdef __cplusplus
extern "C" {
#endif
#ifdef CL2ADLL_EXPORTS
#define CL2ADLL_API __declspec(dllexport)
#else
#define CL2ADLL_API __declspec(dllimport)
#endif
CL2ADLL_API void Cl2a(char argv1[], char argv2[]);
word scan(char** source);
#ifdef __cplusplus
}
#endif
#endif // ! CL2ADLL__H__
这是词法分析器的代码:
// Error MSB6006 "CL.exe" exited with code 2.
#include "pch.h"
#include "Cl2aDLL.h"
/*
// when I comment out the following lines, it compiles and runs okay
word scan(char** source)
{
word w;
w.lexeme[0] = '\0';
return w;
}
*/
// if I only have the following, I get compile error if .cpp
word scan(char** source)
{
}
奇怪的是,如果我编译为 C 代码,它编译并运行正常。但是,如果我尝试编译为 C++,则会收到错误消息。如果我取消注释扫描仪的第一个版本,我会收到编译为 C 或 C++的错误消息。
有谁知道可以删除此错误消息的更改?
抱歉问了这么长的问题,但我试图尽可能清楚地给出问题的定义。因为我想不出哪里出了问题。TIA。
更新:我使用的是 VS 2019 社区版 16.1.1
更新 2:我在 16.1.2 版中得到了相同的结果。但是在VS2017 Community Edition 15.9.12尝试代码就出现了问题,如下图。
另外我应该解释一下,上面所有的代码都在一个 .dll 文件中。.dll 代码是从一个简单的控制台应用程序运行的,如下所示:
#include "..\CL2aDLL\CL2aDLL.h"
int main(int argc, char* argv[])
{
char parm1[1 + 1] = "";
char parm2[1 + 1] = "";
if (argc == 1) {
Cl2aDLL(parm1, parm2);
}
else {
Cl2aDLL(argv[1], argv[2]);
}
return 0;
}
我做了一些额外的研究。
在 VS Community Edition 15.9.12 中运行代码显示该行w.lexeme[0] = '\0';
试图使用未初始化的指针。
修正后的函数为:
word scan(char** source)
{
word w;
w.lexeme = (char*)malloc(1); // <-- line added
w.lexeme[0] = '\0';
return w;
}
这编译并运行正常。
但是,这仍然不能解释为什么此代码会出现 MSB6006 错误:
word scan(char** source)
{
}
这仅在编译为 C++ 时发生。如果编译为 C,它编译并运行正常。
更新:我向 MSFT 报告了这个问题,但看起来他们还没有解决这个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句