Is semicolon ignored in C macro?How to determine CPU and memory consumption from inside a process?Why use apparently meaningless do-while and if-else statements in macros?What is your favorite C programming trick?Improve INSERT-per-second performance of SQLite?how to use #ifdef with an OR condition?Can code that is valid in both C and C++ produce different behavior when compiled in each language?#ifdef inside a macro call works with gcc but not with msvcC preprocessor macro embedded #ifdef #endifC++ macro concatenate with / slashStrange definitions of TRUE and FALSE macros
Generate a random point outside a given rectangle within a map
If the interviewer says "We have other interviews to conduct and then back to you in few days", is it a bad sign to not get the job?
What is the German idiom or expression for when someone is being hypocritical against their own teachings?
Repeated! Factorials!
Star Trek novel in which the Enterprise-A is sold as surplus and refitted with Klingon technology
The meaning of "scale" in "because diversions scale so easily wealth becomes concentrated"
Does a humanoid possessed by a ghost register as undead to a paladin's Divine Sense?
Best way to explain to my boss that I cannot attend a team summit because it is on Rosh Hashana or any other Jewish Holiday
Changing Row Keys into Normal Rows
How to call made-up data?
Find a text string in a file and output only the rest of the text that follows it?
How can I perform a deterministic physics simulation?
Is there a way to say "double + any number" in German?
What is it exactly about flying a Flyboard across the English channel that made Zapata's thighs burn?
Pronouns when writing from the point of view of a robot
London underground zone 1-2 train ticket
I am considering a visit to a Nevada brothel. What should I say at the US border?
Our group keeps dying during the Lost Mine of Phandelver campaign. What are we doing wrong?
Whats the difference between <processors> and <pipelines> in Sitecore configuration?
Premier League simulation
Is the first page of a novel really that important?
Can I enter a rental property without giving notice if I'm afraid a tenant may be hurt?
Can attackers change the public key of certificate during the SSL handshake
Why do dragons like shiny stuff?
Is semicolon ignored in C macro?
How to determine CPU and memory consumption from inside a process?Why use apparently meaningless do-while and if-else statements in macros?What is your favorite C programming trick?Improve INSERT-per-second performance of SQLite?how to use #ifdef with an OR condition?Can code that is valid in both C and C++ produce different behavior when compiled in each language?#ifdef inside a macro call works with gcc but not with msvcC preprocessor macro embedded #ifdef #endifC++ macro concatenate with / slashStrange definitions of TRUE and FALSE macros
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
#define A;
#ifdef A
(...)
#endif
I thought the predecessor would take this as false; however it would goes into this condition. Is A and A; taken as the same?
c macros
add a comment |
#define A;
#ifdef A
(...)
#endif
I thought the predecessor would take this as false; however it would goes into this condition. Is A and A; taken as the same?
c macros
add a comment |
#define A;
#ifdef A
(...)
#endif
I thought the predecessor would take this as false; however it would goes into this condition. Is A and A; taken as the same?
c macros
#define A;
#ifdef A
(...)
#endif
I thought the predecessor would take this as false; however it would goes into this condition. Is A and A; taken as the same?
c macros
c macros
edited Mar 27 at 3:44
Bhargav Rao♦
32.3k21 gold badges94 silver badges115 bronze badges
32.3k21 gold badges94 silver badges115 bronze badges
asked Sep 5 '15 at 2:50
RenjieRenjie
212 bronze badges
212 bronze badges
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
No, they're distinct.
In
#define A;
A
and ;
are two distinct tokens. A
is the macro name, and ;
is its definition. So you could, if you really wanted to, write:
printf("Hello, worldn")A
and it would be equivalent to
printf("Hello, worldn");
(But please don't do that.)
Since the only thing you do with A
is refer to it in an #ifdef
, all you're doing is testing whether it's been defined or not, regardless of how it's defined. The semicolon is irrelevant because you don't use it.
Just as a matter of style and clarity, you should always have a space between a macro name and its definition:
#define A ;
This is particularly important if the first token of the expansion is a (
character. If it immediately follows the macro name, you have a function-like macro definition (the macro takes arguments). If there's a space between the macro name and the (
, the (
is just part of what the macro expands to.
Speaking of semicolons, a common error is including unnecessary semicolons in macro definitions:
#define THE_ANSWER 42;
...
printf("The answer is %dn", THE_ANSWER);
Since the semicolon is part of the macro definition, this expands to:
printf("The answer is %dn", 42;);
which is a syntax error.
@KeithThompson Why does A; won't be taken as a whole macro name?
– Renjie
Sep 6 '15 at 4:06
@Renjie: Because a macro name has to be an identifier.
– Keith Thompson
Sep 6 '15 at 4:48
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%2f32409032%2fis-semicolon-ignored-in-c-macro%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
No, they're distinct.
In
#define A;
A
and ;
are two distinct tokens. A
is the macro name, and ;
is its definition. So you could, if you really wanted to, write:
printf("Hello, worldn")A
and it would be equivalent to
printf("Hello, worldn");
(But please don't do that.)
Since the only thing you do with A
is refer to it in an #ifdef
, all you're doing is testing whether it's been defined or not, regardless of how it's defined. The semicolon is irrelevant because you don't use it.
Just as a matter of style and clarity, you should always have a space between a macro name and its definition:
#define A ;
This is particularly important if the first token of the expansion is a (
character. If it immediately follows the macro name, you have a function-like macro definition (the macro takes arguments). If there's a space between the macro name and the (
, the (
is just part of what the macro expands to.
Speaking of semicolons, a common error is including unnecessary semicolons in macro definitions:
#define THE_ANSWER 42;
...
printf("The answer is %dn", THE_ANSWER);
Since the semicolon is part of the macro definition, this expands to:
printf("The answer is %dn", 42;);
which is a syntax error.
@KeithThompson Why does A; won't be taken as a whole macro name?
– Renjie
Sep 6 '15 at 4:06
@Renjie: Because a macro name has to be an identifier.
– Keith Thompson
Sep 6 '15 at 4:48
add a comment |
No, they're distinct.
In
#define A;
A
and ;
are two distinct tokens. A
is the macro name, and ;
is its definition. So you could, if you really wanted to, write:
printf("Hello, worldn")A
and it would be equivalent to
printf("Hello, worldn");
(But please don't do that.)
Since the only thing you do with A
is refer to it in an #ifdef
, all you're doing is testing whether it's been defined or not, regardless of how it's defined. The semicolon is irrelevant because you don't use it.
Just as a matter of style and clarity, you should always have a space between a macro name and its definition:
#define A ;
This is particularly important if the first token of the expansion is a (
character. If it immediately follows the macro name, you have a function-like macro definition (the macro takes arguments). If there's a space between the macro name and the (
, the (
is just part of what the macro expands to.
Speaking of semicolons, a common error is including unnecessary semicolons in macro definitions:
#define THE_ANSWER 42;
...
printf("The answer is %dn", THE_ANSWER);
Since the semicolon is part of the macro definition, this expands to:
printf("The answer is %dn", 42;);
which is a syntax error.
@KeithThompson Why does A; won't be taken as a whole macro name?
– Renjie
Sep 6 '15 at 4:06
@Renjie: Because a macro name has to be an identifier.
– Keith Thompson
Sep 6 '15 at 4:48
add a comment |
No, they're distinct.
In
#define A;
A
and ;
are two distinct tokens. A
is the macro name, and ;
is its definition. So you could, if you really wanted to, write:
printf("Hello, worldn")A
and it would be equivalent to
printf("Hello, worldn");
(But please don't do that.)
Since the only thing you do with A
is refer to it in an #ifdef
, all you're doing is testing whether it's been defined or not, regardless of how it's defined. The semicolon is irrelevant because you don't use it.
Just as a matter of style and clarity, you should always have a space between a macro name and its definition:
#define A ;
This is particularly important if the first token of the expansion is a (
character. If it immediately follows the macro name, you have a function-like macro definition (the macro takes arguments). If there's a space between the macro name and the (
, the (
is just part of what the macro expands to.
Speaking of semicolons, a common error is including unnecessary semicolons in macro definitions:
#define THE_ANSWER 42;
...
printf("The answer is %dn", THE_ANSWER);
Since the semicolon is part of the macro definition, this expands to:
printf("The answer is %dn", 42;);
which is a syntax error.
No, they're distinct.
In
#define A;
A
and ;
are two distinct tokens. A
is the macro name, and ;
is its definition. So you could, if you really wanted to, write:
printf("Hello, worldn")A
and it would be equivalent to
printf("Hello, worldn");
(But please don't do that.)
Since the only thing you do with A
is refer to it in an #ifdef
, all you're doing is testing whether it's been defined or not, regardless of how it's defined. The semicolon is irrelevant because you don't use it.
Just as a matter of style and clarity, you should always have a space between a macro name and its definition:
#define A ;
This is particularly important if the first token of the expansion is a (
character. If it immediately follows the macro name, you have a function-like macro definition (the macro takes arguments). If there's a space between the macro name and the (
, the (
is just part of what the macro expands to.
Speaking of semicolons, a common error is including unnecessary semicolons in macro definitions:
#define THE_ANSWER 42;
...
printf("The answer is %dn", THE_ANSWER);
Since the semicolon is part of the macro definition, this expands to:
printf("The answer is %dn", 42;);
which is a syntax error.
edited Sep 5 '15 at 4:41
answered Sep 5 '15 at 2:53
Keith ThompsonKeith Thompson
200k28 gold badges309 silver badges500 bronze badges
200k28 gold badges309 silver badges500 bronze badges
@KeithThompson Why does A; won't be taken as a whole macro name?
– Renjie
Sep 6 '15 at 4:06
@Renjie: Because a macro name has to be an identifier.
– Keith Thompson
Sep 6 '15 at 4:48
add a comment |
@KeithThompson Why does A; won't be taken as a whole macro name?
– Renjie
Sep 6 '15 at 4:06
@Renjie: Because a macro name has to be an identifier.
– Keith Thompson
Sep 6 '15 at 4:48
@KeithThompson Why does A; won't be taken as a whole macro name?
– Renjie
Sep 6 '15 at 4:06
@KeithThompson Why does A; won't be taken as a whole macro name?
– Renjie
Sep 6 '15 at 4:06
@Renjie: Because a macro name has to be an identifier.
– Keith Thompson
Sep 6 '15 at 4:48
@Renjie: Because a macro name has to be an identifier.
– Keith Thompson
Sep 6 '15 at 4:48
add a comment |
Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.
Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.
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%2f32409032%2fis-semicolon-ignored-in-c-macro%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