[C question] Best way to change features of the program at compile time: #if((n)def) or if (const)?
Suppose that I have two features in my C program, feature foo and feature bar. I wish to be able to switch what features will be compiled into my program at compile time. The only two ways I know of doing this are:
Using preprocessor directives
#define MYPROG_FEATURE_FOO 1
#define MYPROG_FEATURE_BAR 1
/* ... */
#if MYPROG_FEATURE_FOO == 1
/* code related to feature foo */
#else
/* code to prompt people to pay for the absolutely proprietary version of my program */
#endif
/* ... */
#if MYPROG_FEATURE_BAR == 1
/* code related to feature bar */
#else
/* code to prompt people to pay for the absolutely proprietary version of my program */
#endif
/* ... */
Using the normal if with a const, non-volatile variable
const _Bool myprog_feature_foo = 1;
const _Bool myprog_feature_bar = 1;
/* ... */
if (myprog_feature_foo)
{
/* code related to feature foo */
}
else
{
/* buy proprietary version or no feature for you >:) */
}
/* ... */
if (myprog_feature_bar)
{
/* code related to feature bar */
}
else
{
/* buy proprietary version or no feature for you >:) */
}
/* ... */
What's the better way to do this? Is there a third way to achieve this that I have missed that's better than the above two?
Between those two options, use the preprocessor directives; otherwise go with @alejandro's sugestion. The latter solution incurs a constant cost at runtime and includes code in the executable that should never be run. Preprocessor directives would completely omit the respective feature's code preventing any possibility of access, without them the feature could actually be enabled via memory scanners (something I myself have abused).