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;








4















#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?










share|improve this question
































    4















    #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?










    share|improve this question




























      4












      4








      4


      2






      #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?










      share|improve this question
















      #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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      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

























          1 Answer
          1






          active

          oldest

          votes


















          12














          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.






          share|improve this answer



























          • @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










          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
          );



          );













          draft saved

          draft discarded


















          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









          12














          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.






          share|improve this answer



























          • @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















          12














          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.






          share|improve this answer



























          • @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













          12












          12








          12







          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.






          share|improve this answer















          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.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          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

















          • @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








          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.



















          draft saved

          draft discarded
















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

          Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

          Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript