Cint has limitation in #define usage. Especially from the interactive interfac
e,you can use #define is such ways. It is recommended to use #define only for
#ifdef , #ifndef switch and simple constant value definition.
This is a fundamental limitation which can not be changed easily.
>root [1] TFile *ff= new TFile("c6d-all-sm.root");
>root [2] TNtuple *ntp = (TNtuple*) ff->Get("ntuple");
>root [3] #define tr ntp
>root [4] tr->Draw("LC:Xnm")
>Error: non class,struct,union object tr used with . or -> FILE:/tmp/21737eaa
>LINE:1
>*** Interpreter error recovered ***
Use reference type variable instead.
root[3] TNtuple*& tr = ntp <<<<< instead of #define
root[4] tr->Draw("LC:Xnm")
>Another examples:
>
>root [7] #define asde(x) (2*x-13/x)
>root [8] asde(12)
>Error: Unexpected EOF G__fgetstream():2 FILE:/tmp/21737gaa LINE:1
>Advice: You may need to use +P or -p option
>
>Another one:
>
>root [0] #define asde(x) (2*x-13/x)
>root [1] printf("%d\n",asde(12));
>Warning: sde(12) Missing ';' FILE:tmpfile LINE:4
>Error: No symbol ) in current scope FILE:tmpfile LINE:4
>*** Interpreter error recovered ***
Do not do this. Write a function and load it using .L command.
// asde.h
template<class T> T asde(T x) { return(2*x-13/x); }
root[7] .L asde.h
root[8] asde(12)
Masaharu Goto