I’m preprocessing my InfoPlist file to include my revision number. My header looks like this:
#import "svn.h"
#define APP_VERSION 1.0
#define APP_BUILD APP_VERSION.SVN_REVISION
When I check my build version from within the program, it’s 1.0 . 123456. But if I try this:
#import "svn.h"
#define APP_VERSION 1.0
#define APP_BUILD APP_VERSION ## . ## SVN_REVISION
I get
error: pasting formed 'APP_VERSION.', an invalid preprocessing token
error: pasting formed '.SVN_REVISION', an invalid preprocessing token
I’ve seen this question but it doesn’t actually give an answer; the OP didn’t actually need to concatenate the tokens. I do. How do I concatenate two macros with a dot between them without inserting spaces?
The problem looks like it is being caused by a quirk of the preprocessor: arguments to the concatenation operator aren’t expanded first (or… whatever, the rules are complicated), so currently the preprocessor isn’t trying to concatenate
1.0and., it’s actually trying to paste the wordAPP_VERSIONinto the output token. Words don’t have dots in them in C so this is not a single valid token, hence the error.You can usually force the issue by going through a couple of layers of wrapper macros so that the concatenation operation is hidden behind at least two substitutions, like this:
You’re in luck in that a C Preprocessor number is allowed to have as many dots as you like, even though a C float constant may only have the one.