Mam sobie taki kod:
#define MERGE(a,b) a##b
#define DECL_INT_IMPL(ln) int MERGE(intVar, ln)
#define DECL_INT DECL_INT_IMPL(__LINE__)
int main(int, char **)
{
DECL_INT ;
DECL_INT = 100 ;
DECL_INT ;
DECL_INT_IMPL(__LINE__) ;
return 0 ;
}
Po przejściu preprocesora wygląda to tak:
int main(int, char **)
{
int intVar6 ;
int intVar7 = 100 ;
int intVar8 ;
int intVar9 ;
return 0 ;
}
Ale gdy chcę skrócić to do:
#define DECL_INT_IMPL(ln) int intVar##ln
#define DECL_INT DECL_INT_IMPL(__LINE__)
int main(int, char **)
{
DECL_INT ;
DECL_INT = 100 ;
DECL_INT ;
DECL_INT_IMPL(__LINE__) ;
return 0 ;
}
To LINE nie zostaje sparsowane:
int main(int, char **)
{
int intVar__LINE__ ;
int intVar__LINE__ = 100 ;
int intVar__LINE__ ;
int intVar__LINE__ ;
return 0 ;
}
Czy ktoś jest w stanie wytłumaczyć czemu, albo podesłać link do dokumentacji?