Macro as a parameter to another macro

后端 未结 2 1125
遇见更好的自我
遇见更好的自我 2021-01-13 22:15

I\'m trying to pass the parameters to macro SETBIT with another predefined macro like this:

#define SETBIT(ADDRESS,BIT,N) {(N) ? (ADDRESS &=         


        
相关标签:
2条回答
  • 2021-01-13 22:39

    This works:

    #define SETBIT2(ADDRESS,BIT,N) ((N) ? (ADDRESS &= ~(1<<BIT)) : (ADDRESS |= (1<<BIT)))
    #define SETBIT(PARAMS) SETBIT2(PARAMS)
    #define PORTB 5
    #define POS 7
    #define DAC_SYNC PORTB,3,POS
    
    int main() {
      int a = SETBIT(DAC_SYNC);
      return 0;
    }
    
    0 讨论(0)
  • 2021-01-13 22:49

    Just for the sake of completeness, that same manual you are linking to also states:

    The number of arguments you give must match the number of parameters in the macro definition. When the macro is expanded, each use of a parameter in its body is replaced by the tokens of the corresponding argument.

    So ooga's example is a nice demonstration of how macro expansion works recursively, first the outer macro gets expanded, then the argument.

    0 讨论(0)
提交回复
热议问题