- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
对于当前存在的测试框架,我需要将(在第一次调用期间)传递给该函数内部片段的行号。是这样的:
#include <stdio.h>
void func(int line_num)
{
#define LINE_NUM (__LINE__ + 1)
if(line_num == __LINE__) // Check the passed arg against the current line.
printf("OK");
else
printf("FAIL");
}
int main(void)
{
func(LINE_NUM); // Pass to the func the line number inside of that func.
return 0;
}
(这是更复杂功能的简约版本)。
示例代码打印“FAIL”。
如果我传递一个绝对值 5
,例如func(5)
然后打印“OK”。我不喜欢绝对值 5
,因为如果我在 func
定义前再添加一行,那么绝对值将需要更正。
我还尝试了以下方法,而不是 #define LINE_NUM (__LINE__ + 1)
:
1.
#define VALUE_OF(x) x
#define LINE_NUM (VALUE_OF(__LINE__) + 1)
2.
#define VAL(a,x) a##x
#define LOG_LINE() ( VAL( /*Nothing*/,__LINE__) + 1)
3.
#define VALUE_OF2(x) x
#define VALUE_OF(x) VALUE_OF2(x)
#define LINE_NUM (VALUE_OF(__LINE__) + 1)
我正在使用:
gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
在我的示例代码中,func()
获取的值是 14(调用站点行号 + 1)。
最佳答案
您不能让预处理器在宏定义中展开 __LINE__
。这不是预处理器的工作方式。
但您可以创建全局常量。
#include <stdio.h>
static const int func_line_num = __LINE__ + 3;
void func(int line_num)
{
if(line_num == __LINE__) // Check the passed arg against the current line.
printf("OK");
else
printf("FAIL");
}
int main(void)
{
func(func_line_num); // Pass to the func the line number inside of that func.
return 0;
}
如果您不喜欢 static const int
,无论出于何种原因,您都可以使用枚举:
enum { FUNC_LINE_NUM = __LINE__ + 3 };
不幸的是,无论您使用全局常量还是枚举,都必须将定义放在文件范围内,这可能会使其与使用点有些距离。然而,为什么需要使用测试的精确行号而不是(例如)函数的第一行或什至任何保证唯一的整数还不是很明显:
#include <stdio.h>
// As long as all uses of __LINE__ are on different lines, the
// resulting values will be different, at least within this file.
enum { FUNC_LINE_NUM = __LINE__ };
void func(int line_num)
{
if(line_num == FILE_LINE_NUM) // Check the passed arg against the appropriate constant.
printf("OK");
else
printf("FAIL");
}
int main(void)
{
func(func_line_num); // Pass to the func the line number inside of that func.
return 0;
}
关于c++ - 如何获取另一个函数的 __LINE__ 值(在调用该函数之前)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47319886/
我已经创建了一个用于错误跟踪的宏。这是一个简化版本: #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
我是一名优秀的程序员,十分优秀!