1
#include <stdio.h>

void print(int a = __LINE__){printf("hello %d\n", a);}

void main(){
  print();
  print();
  print();
  print();
}

この場合の__LINE__マクロは 3 に展開されるため、print 関数は同じ値で 4 回呼び出されます。C++ 11 に存在する機能では6,7,8,9なく、印刷関数が呼び出されるように、呼び出しサイトでこのマクロを展開するようにコンパイラーを説得する方法はありますか?3,3,3,3

私のユースケース:

私のアプリケーションでは、一意の ID を取る複数の関数を提供しています。ID は callsite/location ごとに一意である必要があります (そのため、関数が同じステートメントで 2 回呼び出された場合、同じ ID を受け取る必要があります)。現在、ユーザーはLOCATION次のように呼び出しサイトでマクロを手動で入力する必要があります。

#define S1(x) #x //voodoo to concat __FILE__ and __LINE__
#define S2(x) S1(x)
#define LOCATION __FILE__ S2(__LINE__)

do_stuff1(arguments, LOCATION)
do_stuff2(arguments, LOCATION)

次のように関数ごとにマクロを作成せずに、入力を省略できればもっと便利です。

#define do_stuff1(do_stuff1_imp(arguments, LOCATION))
#define do_stuff2(do_stuff2_imp(arguments, LOCATION))

したがって、デフォルトの引数でうまくいくと思いました。これを達成する方法はありますか?

4

3 に答える 3