Macro expansion issue with gccWhat is the difference between g++ and gcc?Differences in Macro ## concatenation operator between Visual-C++ and gccPreprocessor macro GCC: pasting x and x does not give a valid preprocessing tokenWhy doesn't GCC optimize a*a*a*a*a*a to (a*a*a)*(a*a*a)?c++ macro concatation not worked under gccerror: pasting “.” and “red” does not give a valid preprocessing tokenC++11 nested macro invocation?Get the values of macro expansion as understood by the compilerMacro Expansion: Argument with Commasgcc failing to expand some macros
What's the name of the logical fallacy where a debater extends a statement far beyond the original statement to make it true?
How do you justify more code being written by following clean code practices?
Limit max CPU usage SQL SERVER with WSRM
Would a primitive species be able to learn English from reading books alone?
What the heck is gets(stdin) on site coderbyte?
Should a narrator ever describe things based on a character's view instead of facts?
What does "tick" mean in this sentence?
How do I prevent inappropriate ads from appearing in my game?
Why does a 97 / 92 key piano exist by Bösendorfer?
Check if object is null and return null
Pre-Employment Background Check With Consent For Future Checks
"Oh no!" in Latin
Why is participating in the European Parliamentary elections used as a threat?
How do I Interface a PS/2 Keyboard without Modern Techniques?
How to preserve electronics (computers, iPads and phones) for hundreds of years
What is this high flying aircraft over Pennsylvania?
El Dorado Word Puzzle II: Videogame Edition
Language involving irrational number is not a CFL
Typing CO_2 easily
Mimic lecturing on blackboard, facing audience
ContourPlot — How do I color by contour curvature?
Echo with obfuscation
Giving feedback to someone without sounding prejudiced
Unable to disable Microsoft Store in domain environment
Macro expansion issue with gcc
What is the difference between g++ and gcc?Differences in Macro ## concatenation operator between Visual-C++ and gccPreprocessor macro GCC: pasting x and x does not give a valid preprocessing tokenWhy doesn't GCC optimize a*a*a*a*a*a to (a*a*a)*(a*a*a)?c++ macro concatation not worked under gccerror: pasting “.” and “red” does not give a valid preprocessing tokenC++11 nested macro invocation?Get the values of macro expansion as understood by the compilerMacro Expansion: Argument with Commasgcc failing to expand some macros
In gcc, it appears that referencing the results of a macro expansion later inside that same expansion doesn't work. For example:
#define TESTMACRO(name)
static int name##_func(int solNo)
return (solNo);
static int name##Thing = 0,##name##_func,NULL,"", capInvSw##name};
TESTMACRO(stuff)
This results in errors like this:
test.c:7:29: error: pasting "," and "stuff" does not give a valid preprocessing token
static int name##Thing = 0,##name##_func,NULL,"", capInvSw##name`};
^
test.c:9:1: note: in expansion of macro ‘TESTMACRO’
TESTMACRO(stuff)
I would expect to have a function called stuff_func created and passed into stuffThing. I believe that this works in other compilers. What is the equivalent way to do this in gcc?
gcc macros
add a comment |
In gcc, it appears that referencing the results of a macro expansion later inside that same expansion doesn't work. For example:
#define TESTMACRO(name)
static int name##_func(int solNo)
return (solNo);
static int name##Thing = 0,##name##_func,NULL,"", capInvSw##name};
TESTMACRO(stuff)
This results in errors like this:
test.c:7:29: error: pasting "," and "stuff" does not give a valid preprocessing token
static int name##Thing = 0,##name##_func,NULL,"", capInvSw##name`};
^
test.c:9:1: note: in expansion of macro ‘TESTMACRO’
TESTMACRO(stuff)
I would expect to have a function called stuff_func created and passed into stuffThing. I believe that this works in other compilers. What is the equivalent way to do this in gcc?
gcc macros
What does your pre-processor output present for the expansion?
– nico
Mar 7 at 22:19
1
Looks like you have a spurious extra ## in the macro body, which is what the error message is complaining about...
– Chris Dodd
Mar 8 at 0:28
add a comment |
In gcc, it appears that referencing the results of a macro expansion later inside that same expansion doesn't work. For example:
#define TESTMACRO(name)
static int name##_func(int solNo)
return (solNo);
static int name##Thing = 0,##name##_func,NULL,"", capInvSw##name};
TESTMACRO(stuff)
This results in errors like this:
test.c:7:29: error: pasting "," and "stuff" does not give a valid preprocessing token
static int name##Thing = 0,##name##_func,NULL,"", capInvSw##name`};
^
test.c:9:1: note: in expansion of macro ‘TESTMACRO’
TESTMACRO(stuff)
I would expect to have a function called stuff_func created and passed into stuffThing. I believe that this works in other compilers. What is the equivalent way to do this in gcc?
gcc macros
In gcc, it appears that referencing the results of a macro expansion later inside that same expansion doesn't work. For example:
#define TESTMACRO(name)
static int name##_func(int solNo)
return (solNo);
static int name##Thing = 0,##name##_func,NULL,"", capInvSw##name};
TESTMACRO(stuff)
This results in errors like this:
test.c:7:29: error: pasting "," and "stuff" does not give a valid preprocessing token
static int name##Thing = 0,##name##_func,NULL,"", capInvSw##name`};
^
test.c:9:1: note: in expansion of macro ‘TESTMACRO’
TESTMACRO(stuff)
I would expect to have a function called stuff_func created and passed into stuffThing. I believe that this works in other compilers. What is the equivalent way to do this in gcc?
gcc macros
gcc macros
edited Mar 7 at 22:14
MikeLatiolais
asked Mar 7 at 21:44
MikeLatiolaisMikeLatiolais
112
112
What does your pre-processor output present for the expansion?
– nico
Mar 7 at 22:19
1
Looks like you have a spurious extra ## in the macro body, which is what the error message is complaining about...
– Chris Dodd
Mar 8 at 0:28
add a comment |
What does your pre-processor output present for the expansion?
– nico
Mar 7 at 22:19
1
Looks like you have a spurious extra ## in the macro body, which is what the error message is complaining about...
– Chris Dodd
Mar 8 at 0:28
What does your pre-processor output present for the expansion?
– nico
Mar 7 at 22:19
What does your pre-processor output present for the expansion?
– nico
Mar 7 at 22:19
1
1
Looks like you have a spurious extra ## in the macro body, which is what the error message is complaining about...
– Chris Dodd
Mar 8 at 0:28
Looks like you have a spurious extra ## in the macro body, which is what the error message is complaining about...
– Chris Dodd
Mar 8 at 0:28
add a comment |
1 Answer
1
active
oldest
votes
You can try to run only the pre-processor on your code by passing the -E
flag:
gcc -E foo.c
Which evaluates your macro to:
static int stuff_func(int solNo) return (solNo); static int stuffThing = 0,stuff_func,NULL,"", capInvSwstuff`};
That can be expanded for readability to:
static int stuff_func(int solNo)
return (solNo);
static int stuffThing = 0,stuff_func,NULL,"", capInvSwstuff`};
And it appears that you have one extra/missing brackets }
in your expanded macro.
Hope it helps.
Ah, yes, this was an artificial example meant to strip some ambiguity from a real life pinmame issue.
– MikeLatiolais
Mar 7 at 22:16
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55053278%2fmacro-expansion-issue-with-gcc%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can try to run only the pre-processor on your code by passing the -E
flag:
gcc -E foo.c
Which evaluates your macro to:
static int stuff_func(int solNo) return (solNo); static int stuffThing = 0,stuff_func,NULL,"", capInvSwstuff`};
That can be expanded for readability to:
static int stuff_func(int solNo)
return (solNo);
static int stuffThing = 0,stuff_func,NULL,"", capInvSwstuff`};
And it appears that you have one extra/missing brackets }
in your expanded macro.
Hope it helps.
Ah, yes, this was an artificial example meant to strip some ambiguity from a real life pinmame issue.
– MikeLatiolais
Mar 7 at 22:16
add a comment |
You can try to run only the pre-processor on your code by passing the -E
flag:
gcc -E foo.c
Which evaluates your macro to:
static int stuff_func(int solNo) return (solNo); static int stuffThing = 0,stuff_func,NULL,"", capInvSwstuff`};
That can be expanded for readability to:
static int stuff_func(int solNo)
return (solNo);
static int stuffThing = 0,stuff_func,NULL,"", capInvSwstuff`};
And it appears that you have one extra/missing brackets }
in your expanded macro.
Hope it helps.
Ah, yes, this was an artificial example meant to strip some ambiguity from a real life pinmame issue.
– MikeLatiolais
Mar 7 at 22:16
add a comment |
You can try to run only the pre-processor on your code by passing the -E
flag:
gcc -E foo.c
Which evaluates your macro to:
static int stuff_func(int solNo) return (solNo); static int stuffThing = 0,stuff_func,NULL,"", capInvSwstuff`};
That can be expanded for readability to:
static int stuff_func(int solNo)
return (solNo);
static int stuffThing = 0,stuff_func,NULL,"", capInvSwstuff`};
And it appears that you have one extra/missing brackets }
in your expanded macro.
Hope it helps.
You can try to run only the pre-processor on your code by passing the -E
flag:
gcc -E foo.c
Which evaluates your macro to:
static int stuff_func(int solNo) return (solNo); static int stuffThing = 0,stuff_func,NULL,"", capInvSwstuff`};
That can be expanded for readability to:
static int stuff_func(int solNo)
return (solNo);
static int stuffThing = 0,stuff_func,NULL,"", capInvSwstuff`};
And it appears that you have one extra/missing brackets }
in your expanded macro.
Hope it helps.
answered Mar 7 at 22:13
niconico
322217
322217
Ah, yes, this was an artificial example meant to strip some ambiguity from a real life pinmame issue.
– MikeLatiolais
Mar 7 at 22:16
add a comment |
Ah, yes, this was an artificial example meant to strip some ambiguity from a real life pinmame issue.
– MikeLatiolais
Mar 7 at 22:16
Ah, yes, this was an artificial example meant to strip some ambiguity from a real life pinmame issue.
– MikeLatiolais
Mar 7 at 22:16
Ah, yes, this was an artificial example meant to strip some ambiguity from a real life pinmame issue.
– MikeLatiolais
Mar 7 at 22:16
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55053278%2fmacro-expansion-issue-with-gcc%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What does your pre-processor output present for the expansion?
– nico
Mar 7 at 22:19
1
Looks like you have a spurious extra ## in the macro body, which is what the error message is complaining about...
– Chris Dodd
Mar 8 at 0:28