简体   繁体   中英

C macro using two macros

I want to make a macro to utilize two macros

#define BUZZER_ON func_buzz(1);\
                  flag_buzzer_on = 1;\


#define BUZZER_OFF func_buzz(0);\
                  flag_buzzer_on = 0;\

#define BUZZER_TOGGLE ((flag_buzzer_on == 1) ? BUZZER_OFF : BUZZER_ON ) ;

where func_buzz is function to turn buzzer on or off depending on value passed

BUZZER ON and BUZZER OFF MACRO is working correctly

but when i use MACRO BUZZER_TOGGLE i get error

expression expected: or ) before;

How to write MACRO BUZZER_TOGGLE

remember that in your case you can think of macro expansion simplified as text replacement although that's not quite correct as @Eric Postpischil has correcty stated in his comment.

In your case the line

 BUZZER_TOGGLE;

is expanded to

((flag_buzzer_on == 1) ? func_buzz(0); flag_buzzer_on = 0; : func_buzz(1); flag_buzzer_on = 1;) ;;

(assuming the second #define BUZZER_ON in the question is a typo for BUZZER_OFF ).

You can see that this is no valid statement. You could make it valid if you defined

#define BUZZER_ON  (func_buzz(1), flag_buzzer_on = 1)

and BUZZER_OFF accordingly

but maybe it's easier just to use simple functions instead of macros.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM