From: Royce & S. P. <be...@et...> - 2004-10-29 05:29:14
|
Hi, ----- Original Message ----- > > #define delay_J(); _asm\ ------------------------------- Is the semicolon above appropriate? Also why the parenthesis? You're not passing any parameters to the macro. --Royce. -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. MailScanner thanks transtec Computers for their support. |
From: Bodo W. <bod...@we...> - 2004-10-30 15:08:53
|
Just my EUR 0.02: > #define delay_J(); _asm\ > Is the semicolon above appropriate? > Also why the parenthesis? You're not passing any parameters to the macro. The parentheses are OK, showing that this is to be used as a function. But it's a pity that the number of parameters can't be checked. The semicolon is not OK. A trick found in several GNU docs and sources to get safe macro expansions, the important stuff is the "do ... while(0)": #define macro_func() \ do { \ /* my code, may even have local variables */ \ } while (0) So all of the following usages are doing what you'll expect: some_func(); macro_func(); other_func(); if (...) /* or do, while, for */ macro_func(); else something_else(); if (...) /* or do, while, for */ { macro_func(); } else { something_else(); } And the last sample generates a compile error, as necessary: some_var = macro_func(); HTH, Bodo |