在C++中连接__FILE__和__LINE__宏
Concatenating __FILE__ and __LINE__ macros in C++
我希望我的异常消息包含有关异常位置的信息。
所以我想有这样的东西:
#define LOCATION __FILE__ " : " __LINE__
throw std::exception(std::string("ABCD. ") + LOCATION);
这种定义显然是不正确的。我怎样才能做到这一点?
您需要在两个级别中扩展该宏:
#define S1(x) #x
#define S2(x) S1(x)
#define LOCATION __FILE__ " : " S2(__LINE__)
原因如下:
您需要在两个级别中扩展__LINE__
,然后再将其传递给#x
。
首先,在类似函数的宏中使用运算符#
,它必须后跟一个宏参数,但__LINE__
不是参数,所以编译器抱怨它是一个杂散运算符。
另一方面,__LINE__
本身是一个宏并且包含当前行号,在将其与 #
一起使用之前,应将其扩展到该数字,否则,您将获得字符串"__LINE__"
而不是数字。
宏S2(__LINE__)
__LINE__
扩展到行号,然后将行号传递给#x
。
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- Visual Studio C++ Project File CustomBuild Task: Filter Outp
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 以某种方式告诉编译器"Do not process line of code"
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 如何在从文件中读取整数时使用 file.eof()?
- "No such file or directory" C++标头问题
- 使用 sftp_open() 使用 C++ 中的 SFTP libssh 将文件从本地复制到远程时,File 返回 N
- Visual Studio "fatal error LNK1104: cannot open file"未使用或包含的库
- typedef vector size_type in header file
- make 命令创建 .file,但不创建应用程序文件
- 为什么 VScode 在 .h 文件中显示"'iostream' file not found"?
- 我在 #include < bits/stdc++h.> 放置时出错"No such file or directory"
- 使用 编译时。RES File with MinGW G++, .无法识别 RES
- qSetMessagePattern( "%{file}(%{line}): %{message}" ) 输出"unkown(0)"
- GDB 不断产生"No line xx in file"错误,即使文件包含以下行
- "Peek ahead"检查下一次对getline(file,line)的调用是否会返回false - 而不实际调用它,即不消耗该行