[GiNaC-devel] about adding new function

Chris Dams Chris.Dams at mi.infn.it
Fri Jul 7 13:11:19 CEST 2006


Dear Wangtielei,

First I would like to point out to you that ginac-devel at ginac.de is not
the right list for questions like this. Better use ginac-list at ginac.de for
this.

On Thu, 6 Jul 2006, [gb2312] wangtielei(ÍõÌúÀÚ) wrote:

> #include <ginac/ginac.h>
> using namespace std;

It is generally considered bad to use "using" in a header file. The reason 
is that everybody using your header will get everything that is in the 
std-namespace for free and they may not want it because it may cause 
conflicting names.

> namespace GiNaC {

I'm not sure what generally the opinions are on putting your own 
functions inside the namespace of a library. I never do that.

> /* a test function*/
> DECLARE_FUNCTION_2P(myfcn)
> }
> #endif

Delete the #endif. There is no corresponding #if. Better yet, use include
guards for the header file.
  
> and the source file <xxx.cxx>
> #include "xxx.h"
> #include "ginac.h"

This should be <ginac/ginac.h>. Or just omit the entire line as ginac.h is 
already included via xxx.h.

> namespace GiNaC {
> REGISTER_FUNCTION(myfcn, dummy())
> }

Now you also need test program that uses your new function. An example 
would be (put this in a file test.cxx):

#include "xxx.h"

using namespace std;
using namespace GiNaC;

int main()
{  ex f = myfcn(1,2);
   cout << f << endl;
   return 0;
}

Both files are compiled using

g++ -c `ginac-config --cppflags` xxx.cxx
g++ -c `ginac-config --cppflags` test.cxx

and then linked using

g++ -o test `ginac-config --libs` test.cxx xxx.cxx

Actually, usually one would control the process of compiling and linking
using a tool like make.

Now typing ./test gives the output:
myfcn(1,2)

Good luck!
Chris





More information about the GiNaC-devel mailing list