C++解释器: How to emit error messages?

标签 c++ string

我想像当今所有解释器一样发出动态错误消息,例如:

Name error: Undefined variable

将是不变的,但我想要达到的是:

Name error: Undefined variable 'X', in line 1

好的。行号确实没问题:每个错误消息都必须有行号,所以我将其添加到错误发射器函数中:

Error( ErrType type, string msg, int line );

那么我的问题出在哪里?

如何将'X'放入 undefined variable *中?

  • 我无法使用 sprintf,因为它不支持字符串,但我在任何地方都使用它们
  • 我不能简单地使用 cout 并连接所有内容,因为我希望可以抑制错误消息
  • 我想将所有内容都放入一个函数中,如上面的 Error()

如何组合动态错误消息?

例如:Error( Name, sprintf(" undefined variable %s", myVariableName ), lineNum );

(但是 myVariableName 是一个字符串,sprintf 会把事情搞砸)

最佳答案

您可以通过调用 c_strmyVariableName 获取以 null 结尾的 C 字符串:

myVariableName.c_str()

请注意,您对 sprintf 的使用不正确; sprintf 的第一个参数采用用于放置格式化字符串的缓冲区。如果您在程序中使用 std::string,为什么还要使用 sprintf 呢?如果 Error 采用 std::string 那么你可以只使用字符串连接:

Error(Name, "Undefined variable " + myVariableName, lineNum);

关于C++解释器: How to emit error messages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2662554/

相关文章:

c++ - 为什么C++ std::string 可以支持日语、法语的字符?

c++ - 将 .o 库文件链接到共享对象时出现问题

python - 字符串连接的变体?

字符串 - strcpy、strcat 等函数

java - 正确处理巨大的输入和处理字符串

java - 正则表达式匹配相同数字的模式

c++ - 从函数返回的 void* 指针 - 堆损坏

c++ - 从 unsigned char* 到 const wchar_t* 的转换

c++ - 我是否需要手动删除或管理这个 unique_ptr

python - 我正在尝试使用 python 对字符串执行一些手动编码