- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经创建了一个用于错误跟踪的宏。这是一个简化版本:
#include <stdio.h>
#define ERR(...) \
printf("error @ %d\n", __LINE__)
int main()
{
return ERR(1, /* line 7 */
2, /* line 8 */
3); /* line 10 */
}
执行时会打印:
error @ 10
但是,要将打印的行号与 grep
输出(grep -n ERR test.c
)匹配,我需要 ERR
字符串(
第 7 行
)。
这样的事情有可能吗?有什么想法吗?
补充说明:该宏应该看起来像一个函数调用(这样我就可以执行
return ERR(...);
)。编译器是 GCC 版本 4.4.5。可以使用 C99 + GNU 扩展。
最佳答案
基于@cwyang 命题,使用定义中括号不匹配的宏和逗号运算符。
#define ERR (LINEINFO, HANDLEARGS
#define HANDLEARGS(...) __LINE__)
#define LINEINFO printf("error @ %d: ", __LINE_)
return ERR(x,
y,
z);
将扩展到
return (printf("error @ %d: ", 5), 7);
使用 gcc。
关于c - 如何获取多行宏调用的宏名称 __LINE__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494343/
我已经创建了一个用于错误跟踪的宏。这是一个简化版本: #include #define ERR(...) \ printf("
这个问题在这里已经有了答案: Creating C macro with ## and __LINE__ (token concatenation with positioning macro) (
我在头文件中有一个函数: template inline void log() {} 然后我尝试这个技巧来使它更容易使用: #define LOG_LINE log() 然后在 .cpp 文件中我这
我可以将 __LINE__ 用作方法参数就好了,但我想要一种在使用字符串的函数中使用它的简单方法。 例如说我有这个: 11 string myTest() 12 { 13 if(!
基本上,我的问题是 this除了 perl 而不是 PHP。 我知道warn() 管理它,但是warn() 是核心perl,所以我理解它是否通常不可能。 附录(以防链接最终失败) 有一个功能 sub
在 C/C++ 中,是否有一个宏会告诉我相对于找到该宏的函数开头的行号,而不是相对于文件开头的行号? 最佳答案 不,但是您可以通过创建行偏移来做一些等效的事情: int func(char *s) {
考虑一下我写的这个简短的程序: #include template constexpr int add(const int& a, const int& b) {
在另一篇文章 (Scala, Maven, and preprocessors) 中,我询问了有关使用 m4 等工具预处理 Java 和 Scala 的问题。我需要添加 __FILE__ 和 __LI
假设,我从下面的代码构建了一个独特的函数体: #define TOKENPASTE(x, y) x ## y #define TOKENPASTE2(x, y) TOKENPASTE(x, y) #d
所以,我感兴趣的是一个类似于 __LINE__ 的宏,但不是返回行号,而是返回给定行内的位置。 它可以是行中的列或字符位置。例如,在代码中: #define THISCHAR int main(voi
我阅读了有关使用 Cppreference 的宏的信息. __LINE__ : expands to the source file line number, an integer constant,
是否有可能通过LINE 宏获取在线报告的整个字符串。示例代码: #include #define LOG(lvl) pLog(lvl, __LINE__, __FILE__) pLog(const
在 C++ 中调试的一个有用的打印是 std::cout << __LINE__ << std::endl; 当然你可以简单地打印一个带有行号的字符串,例如: std::cout << "this i
我尝试使用以下方法打印当前代码的行号: #include void err (char *msg) { printf ("%s : %d" , msg , __LINE__); } int
我不明白以下程序的输出: #include #define FOO std::cout 2: 3: #define FOO std::cout #define __LINE__ 3 #defi
有没有什么方法可以在 Javascript 中获取源代码行号,比如 C 或 PHP 的 __LINE__? 最佳答案 有一种方法,虽然更昂贵:抛出异常,立即捕获它,并从其堆栈跟踪中挖掘出第一个条目。参
我想做一些异常处理。我计划使用 __LINE__ 和 __FILE__ 宏。 我有一些 header Vectors.hpp,我在其中为 vector 结构实现了一些类。在这个类中,我实现了 oper
我正在编写一些我想集成到库中的代码。我希望它没有外部依赖性并且符合标准。我想使用模板创建一个唯一的类型以允许编译时类型检查。 更新: 下面的代码来自msdn,这不是我尝试做的。我尝试做的是在用户每次使
我正在编写一个简单的宏来显示 TRACE 信息。 这是我用的, #ifdef __DEBUG__ #define TRACE { PrintErrorMsg("Trace exception at
为什么 __LINE__ 根据它是在类似函数的宏还是在常规函数中使用而进行不同的评估? 例如: #include #define A() printf("%d\n",__LINE__); int ma
我是一名优秀的程序员,十分优秀!