Deutsch English Français Italiano |
<uv6mna$14d6r$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> Newsgroups: comp.lang.c Subject: Re: Help requested with P99-based macro to create Wayland listeners Date: Wed, 10 Apr 2024 11:44:58 -0700 Organization: A noiseless patient Spider Lines: 82 Message-ID: <uv6mna$14d6r$1@dont-email.me> References: <pan$3770d$7f0531e6$76520fa1$2c09330e@invalid.invalid> <86ttka1p61.fsf@linuxsc.com> <pan$325a1$29dc1a44$271afe6a$307a257b@invalid.invalid> <uv46mg$e1e0$1@dont-email.me> <pan$57aa8$bcee1756$62f53bf3$9223a50a@invalid.invalid> <uv5kpk$s1fr$1@dont-email.me> <9kxRN.169894$t8cc.141699@fx06.iad> <uv696j$1108s$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Wed, 10 Apr 2024 20:44:59 +0200 (CEST) Injection-Info: dont-email.me; posting-host="1e0154287d270c974cd6798ddf950547"; logging-data="1193179"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+QOqp2kRI2ibzRPs7N+8/AKzsXleCe1Hw=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:pEPmvzVY0/H/Co22IYRcgmarT2A= In-Reply-To: <uv696j$1108s$1@dont-email.me> Content-Language: en-US Bytes: 4578 On 4/10/2024 7:54 AM, David Brown wrote: > On 10/04/2024 16:26, Scott Lurndal wrote: >> David Brown <david.brown@hesbynett.no> writes: >>> On 09/04/2024 22:20, Blue-Maned_Hawk wrote: >>>> David Brown wrote: >>>> >>>>> On 09/04/2024 20:17, Blue-Maned_Hawk wrote: >>>>>> Tim Rentsch wrote: >>>>>> >>>>>>> What is it that you want to accomplish? >>>>>> >>>>>> As i stated in the subject line, i am trying to create a macro to >>>>>> create Wayland listeners. >>>>>> >>>>>> >>>>> Assume, for the sake of argument, that no one knows or cares anything >>>>> about Wayland or listeners. >>>> >>>> <https://xkcd.com/1432/> >>>> >>>>> You are trying to use a set macros to expand to some code. Start by >>>>> showing what code you want to get from examples of using your macros - >>>>> then people can try to help get the macros right. >>>> >>>> MAKE_LISTENER(wl_registry, global, global_remove); >>>> >>>> → >>>> >>>> static const struct wl_registry_listener wl_registry_listener = { >>>> .global >>>> = callback_wl_registry_global, .global_remove = >>>> callback_wl_registry_global_remove }; >>> >>> #define _get_6th_arg(_1, _2, _3, _4, _5, _arg, ...) _arg >>> #define _fe_0(_global, _call, ...) >>> #define _fe_1(_global, _call, x) _call(_global, x) >>> #define _fe_2(_global, _call, x, ...) _call(_global, x) _fe_1(_global, >>> _call, __VA_ARGS__) >>> #define _fe_3(_global, _call, x, ...) _call(_global, x) _fe_2(_global, >>> _call, __VA_ARGS__) >>> #define _fe_4(_global, _call, x, ...) _call(_global, x) _fe_3(_global, >>> _call, __VA_ARGS__) >>> #define expand_macro_for_each(_global, _macro, ...) \ >>> _get_6th_arg("ignored", __VA_ARGS__, \ >>> _fe_4, _fe_3, _fe_2, _fe_1, _fe_0)(_global, _macro, __VA_ARGS__) >>> >>> >>> >>> #define MAKE_LISTENER(object_type, ...) _make_listener(object_type, >>> __VA_ARGS__) >>> #define _listener_entry(_global, _field) , . _field = callback_ ## >>> _global ## _ ## field >>> #define _make_listener(object_type, first_field, ...) static const >>> struct \ >>> object_type ## _listener object_type ## _listener = { \ >>> .first_field = callback_ ## object_type ## _ ## first_field \ >>> expand_macro_for_each(object_type, _listener_entry, __VA_ARGS__) \ >>> } >>> >> >> Frankly I'd reject that code in any code review request. > > I normally like code to be so clear that comments about how it works are > unnecessary. But I think for something like this, a few comments would > be helpful! > > When doing this kind of messing around with advanced preprocessing, it's > useful to have a set of re-usable macros that can be written and > documented once. The "expand_macro_for_each" macro and its parts is > partly there, and once that is in place and accepted, the rest is a lot > smaller step to accept in a code review. > > But this is code to help the OP get his macro generations working. > Whether he likes it, rejects it, or uses it for inspiration is up to him. > > The OP needs a deep read of the chaos lib: https://github.com/rofl0r/chaos-pp Might help... ? ;^)