- 论坛徽章:
- 13
|
回复 11# nswcfd
是这个意思吗:test(0)只会展开为宏里case 0分支下的内容,即print()?
- #include <stdio.h>
- void print() {
- printf("hello\n");
- }
- #define test(n) ({ \
- switch(n) { \
- case 0: print(); \
- case 1: xx(); \
- default: break; \
- } \
- })
- int main()
- {
- test(0);
- return 0;
- }
复制代码 但是加上case 1: xx(); \这行后,就编译不过了 。
原问题中的宏定义:
- /* Careful: we have to cast the result to the type of the pointer for sign reasons */
- #define get_user(x,ptr) \
- ({ int __ret_gu,__val_gu; \
- switch(sizeof (*(ptr))) { \
- case 1: __get_user_x(1,__ret_gu,__val_gu,ptr); break; \
- case 2: __get_user_x(2,__ret_gu,__val_gu,ptr); break; \
- case 4: __get_user_x(4,__ret_gu,__val_gu,ptr); break; \
- default: __get_user_x(X,__ret_gu,__val_gu,ptr); break; \
- } \
- (x) = (__typeof__(*(ptr)))__val_gu; \
- __ret_gu; \
- })
复制代码 case 1/2/4下分别会变成__get_user_1()、__get_user_2()、__get_user_4(),都有定义,default会变成__get_user_X(),没有找到定义 。
|
|