現在のテストフレームワークでは、最初に関数()をその関数内のフラグメントの行番号に渡す必要があります。このような何か: 他の関数の__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
定義の前にもう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)
私が使用している:その代わり#define LINE_NUM (__LINE__ + 1)
の
は、私はまた、次のことを試してみました
私のサンプルコードでは、func()
の値は14(コールサイトの行番号+1)です。
ので、年の小さなサンプル中LINE_NUMの値は何ですか? – pm100
'#define'を関数の外に移動してください – smac89
@ pm100私の質問に「func()の値は14」という値を追加しました。 @ smac89 '#define'を動かすことで問題は解決します。サンプルコードで質問に答えることができますか? –