5 ms·
Technically, this is not a C preprocessor, more like a general-purpose macro processor, since you're using it as a third layer (second being C macros, first bei
by fizixer 11y ago
Technically, this is not a C preprocessor, more like a general-purpose macro processor, since you're using it as a third layer (second being C macros, first being C itself) instead of replacing C macros.
Although it gives me an idea, a converter that takes a valid C program (with macros) and replaces the C macros with some other macros (in this case yupp macros) that perform the same task. e.g.,
replacing
#include <stdio.h>
with something like:
($include "stdio.h")
- leni536 11y agoMy first thought as well. Why restrict to C? It could be useful for many other languages.
- in4lio 11y agoJust because C is my primary tool) and I have created yupp, to do things like X Macros simpler. yupp can even be used with Python, as it allows to make the right indentation, e.g. https://github.com/in4lio/yupp/blob/master/eg/dict.yu-py https://github.com/in4lio/yupp/blob/master/eg/dict.yu-py
- in4lio 11y agoYes, you are right. Since yupp is a third layer, yupp is able to generate C macros, for example: ($define,,assert_bit_mask( value, mask, op ),,($do ] bool test = ((( value ) & ( mask )) == ( mask )); if ( !test ) { ut_fault( "expected mask to be set", __FILE__, __FUNCTION__, __LINE__ ); op; } [ )) will result in: #define assert_bit_mask( value, mask, op ) do { \ bool test = ((( value ) & ( mask )) == ( mask )); \ if ( !test ) { \ ut_fault( "expected mask to be set", __FILE__, __FUNCTION__, __LINE__ ); \ op; \ } \ } while ( 0 ) but you don't need to think about backslashes)