...macro.h.... /***Dangerouse Macro1***/ #define print_int_value_twice(c) do{\ printf("first time %c second time %c\n",c,c);\ }while(0); /***Stupid Preprocessor***/ #define my_error(c) do{\ fprintf(stderr,"Error::"); fprintf(stderr,c); fprintf(stderr,"\n"); exit(1); }while(0); .....macro user .... j=0; print_int_value_twice(j++); /*j incremented twice by the preprocessor*/ /*In this case the preprocessor is stupid not treat the string spanned across several lines as a incomplete macro argument and fails compilation.*/ my_error(" My error spans three lines line1 line2");
Avoid MACROS start using inlines , if you define macros the users should use them with caution
No comments:
Post a Comment