Question

There is a global function that registers services:

// services call this to register upon creation
extern void RegisterService(adapter::Service *s);

Then somewhere in a .cpp file some service registers itself:

// create the adapter and register with libecap to reach the host application
static const bool Registered = (libecap::RegisterService(new Adapter::Service), true);

Why registration isn't made simply by calling libecap::RegisterService(new Adapter::Service)? It looks even stranger, because the global variable Registered isn't used.

Was it helpful?

Solution

Because you can't place expressions in empty space floating around in a source file. Only declarations.

This is a common way to force an expression to be evaluated here, even if the resulting object is never actually used afterwards.

OTHER TIPS

The aithor of the code wanted to have a bool flag that will say whether the service already registered. He could write for example

libecap::RegisterService(new Adapter::Service);
static const bool Registered =  true;

provided that Registered is a local variable.

But if Registered is not a local variable then he may not call a function outside some other function (or main). So the only method to define a global bool variable (with external or internal linkage) and at the same time to call a function that has return type void is the following

static const bool Registered = (libecap::RegisterService(new Adapter::Service), true);

The result of the expression of the comma operator is true an Registered will be initialized by this value. And at the same time function libecap::RegisterService(new Adapter::Service) will be called.

As an alternative he could define a class the constructor of which would contain the call of the function and the destructor would contain some unregister stuff.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top