Hi Jacek,
Here is a summary of the current situation (3.05).
CINT and rootcint handled properly the following header files
- most compilers headers (like stream.h, stdio.h). the complete
list is at $ROOTSYS/cint/include
- All headers of previously loaded libraries (including ROOT's own)
that have the SAME name as a class known to ROOT (i.e. a class
with a ClassDef).
CINT interpreted mode does not like the following header files because
if they are included by the interpreter it defines its content as
interpreted functions/classes/variables even-though it exists as compiled
code.
- All of CINT header files (like API.h)
- Header files that do not define classes by the same name
(like RType.h, GuiTypes.h, etc...)
- Header files declaring classes (etc.) that are defined in
a library you did not load yet. (For example doing a
#include "TLorenzVector.h" __before__ doing a gSystem->Load("libPhysics") )
ROOTCINT can handle any include files that do not contain syntax that is
illegal
for CINT (see Cint limitations:
http://root.cern.ch/root/Cint.phtml?limitations )
Hiding from ROOTCINT header files that are necessary for compilation but
are optional when using the interpreter can lead to a subtle but fatal
errors!
For example:
#ifndef __CINT__
#include "TTree.h"
#else
class TTree;
#endif
class subTree : public TTree {
....
};
When rootcint is ran, it will NOT have enough information about the TTree
class
to produce the correct dictionary file. [If you try this, both rootcint and
the compilation will finish without error, however trying to create a
subTree
object will lead to a core dump.]
So as matter of precaution it is better to let rootcint see as many header
files
as possible.
So a refinement Jacek's previous example could be
#include <stdio.h>
#include <stream.h>
#include "TROOT.h"
#include "TTree.h"
#include "TFile.h"
#ifndef __CINT__
#include "Api.h"
#endif
Philippe.
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:37 MET