#include <stdio.h>
void print(int a = __LINE__){printf("hello %d\n", a);}
void main(){
print();
print();
print();
print();
}
Макрос __LINE__
в этом случае расширяется до 3, поэтому функция печати вызывается 4 раза с одним и тем же значением.Есть ли способ убедить компилятор развернуть этот макрос на месте вызова, чтобы функция печати вызывалась с 6,7,8,9
вместо 3,3,3,3
с функциями, существующими в C ++ 11?
Мой вариант использования:
В моем приложении я предоставляю несколько функций, которые принимают уникальный идентификатор.Идентификатор должен быть уникальным для каждого места вызова / местоположения (поэтому, если функция вызывается два раза через один и тот же оператор, она должна получить один и тот же идентификатор).В настоящее время пользователь всегда должен вручную вводить макрос 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))
Поэтому я подумал, что аргумент по умолчанию поможет.Есть ли способ добиться этого?