A macro for long and short function names in C++

I am currently working on a general-purpose C++ library. Well, I like using real-word function names and actually my project has a consistent function naming system. The functions (or methods) start with a verb if they do not return bool (in this case they start with is_)
The problem is this can be somewhat problematic for some programmers. Consider this function:

#include "something.h"
int calculate_geometric_mean(int* values)
{
//insert code here
}

I think such functions seem to be formal, so I name my functions so. However I designed a simple Macro system for the user to switch function names.

#define SHORT_NAMES
#include "something.h"
#ifdef SHORT_NAMES
int calc_geometric_mean(int* values)
#else
int calculate_geometric_mean(int* values)
#endif
{
//some code
}

Is this wiser than using alias (since each alias of function will be allocated in the memory), or is this solution a pure evil?

Upvotes: 1

Views: 667

Answers (3)

Carl
Carl

Reputation: 44488

Usually, the purpose behind a naming system is to aid the readability and understanding of the code.

Now, you effectively have 2 systems, each of which has a rationale. You're already forcing the reader/maintainer to keep two approaches to naming in mind, which dilutes the end goal of readability. Never mind the ugly #defines that end up polluting your code base.

I'd say choose one system and stick to it, because consistency is the key. I wouldn't say this solution is pure evil per se - I would say that this is not a solution to begin with.

Upvotes: 0

NPE
NPE

Reputation: 500873

FWIW, I don't think this dual-naming system adds a lot of value. It does, however, has the potential for causing a lot of confusion (to put it mildly).

In any case, if you are convinced is a great idea, I would implement it through inline functions rather than macros.

// something.h

int calculate_geometric_mean(int* values); // defined in the .cpp file

inline int calc_geo_mean(int* values) {
   return calculate_geometric_mean(values);
}

Upvotes: 4

Luchian Grigore
Luchian Grigore

Reputation: 258648

What symbols will be exported to the object file/library? What if you attempt to use the other version? Will you distribute two binaries with their own symbols?

So - no, bad idea.

Upvotes: 2

Related Questions