Quantcast
Viewing all articles
Browse latest Browse all 40

error: pasting "." and "red" does not give a valid preprocessing token

I'm implementing The X macro, but I have a problem with a simple macro expansion. This macro (see below) is used into several macros usage examples, by including in this article. The compiler gives an error message, but I can see valid C code by using -E flag with the GCC compiler.

The macro X-list is defined as the following:

#define LIST \  X(red, "red") \  X(blue, "blue") \  X(yellow, "yellow")

And then:

#define X(a, b) foo.##a = -1;  LIST;#undef X

But the gcc given the following errors messages:

lixo.c:42:1: error: pasting "." and "red" does not give a valid preprocessing tokenlixo.c:42:1: error: pasting "." and "blue" does not give a valid preprocessing tokenlixo.c:42:1: error: pasting "." and "yellow" does not give a valid preprocessing token

Like I said, I can seen valid C code by using -E switch on gcc:

lixo.c:42:1: error: pasting "." and "red" does not give a valid preprocessing tokenlixo.c:42:1: error: pasting "." and "blue" does not give a valid preprocessing tokenlixo.c:42:1: error: pasting "." and "yellow" does not give a valid preprocessing token  foo.red = -1; foo.blue = -1; foo.yellow = -1;;

What's a valid preprocessing token? Can someone explain this?

(before you say "why not just an either initialize or memset()?" it's not my real code.)


Viewing all articles
Browse latest Browse all 40

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>