如何获取另一个函数的__LINE__的值(在调用该函数之前)?

罗宾·库兹敏

对于当前存在的测试框架,我需要(在第一个调用期间)将该函数内部片段的行号传递给该函数。像这样:

#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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当从另一个函数中调用该函数时,如何抑制该函数中的代码行?

如何在调用另一个函数之前执行一个函数

如何测试一个函数在另一个函数之前被调用

如何从之前定义的另一个函数调用函数模板?

Python 3:如何从另一个文件调用函数并将参数传递给该函数?

如何编写一个使用另一个函数的 2 个值的函数,该函数生成 10000 个值?

在调用另一个函数之前返回

如何从Node.js函数获取返回值,该函数包含来自另一个应用程序的数据库查询

从另一个文件调用 Python 函数并使用该函数的 DF

检查是否可以使用另一个函数的参数调用该函数

PostgreSQL,一个函数调用另一个函数并向调用者获取2个值

定义一个函数,该函数为各种字符串python调用另一个函数

承诺`then`,该函数不返回任何值,而函数返回另一个诺言

尽管在该行之前调用了另一个函数,为什么该函数的下一行仍然执行?

如何调用另一个函数内部的函数?

如何从函数调用到另一个函数

在 Kotlin 中成功完成另一个函数后,如何执行该函数?

如何调用另一个构造函数之前分割字符串

如何在导出默认值的函数内调用另一个函数?

当<input>值已经被另一个函数修改时,如何调用javascript函数?

通过JavaScript函数调用ap:remoteCommand,该函数通过“ oncomplete”处理函数将该函数本地的消息传递给另一个函数

为什么我的 kivy 程序没有从另一个类调用该函数?

python如何执行调用函数的对象方法,该函数从同一对象调用另一个方法

如何从另一个类获得函数的结果,而另一个类又调用了带值的

如何在另一个文件中调用异步 javascript 函数的 html 文件中获取返回值?

如何从另一个函数调用一个函数以及如何调用?

如何使一个函数在运行之前等待另一个函数的完成

我可以将一个函数传递给另一个函数,该函数调用具有依赖性的函数吗?

PHP如何从另一个类调用函数?