Skip to content

Instantly share code, notes, and snippets.

@imaami
Created February 6, 2024 00:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save imaami/15b7594c5bb816335c734f9265ffc076 to your computer and use it in GitHub Desktop.
Save imaami/15b7594c5bb816335c734f9265ffc076 to your computer and use it in GitHub Desktop.
Compile-time generation of correctly aligned text
#include <stddef.h>
#include <stdio.h>
#define options(X) \
X('h', "help", "", "print this help") \
X('s', "segfault", "", "commit sudoku") \
X('d', "directory", "DIR", "touch a directory") \
X('u', "uid-of", "NAME", "print a user ID")
#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wc++-compat"
#pragma clang diagnostic ignored "-Wc++98-compat"
#pragma clang diagnostic ignored "-Wgnu-empty-initializer"
#pragma clang diagnostic ignored "-Wpre-c2x-compat"
#pragma clang diagnostic ignored "-Wunknown-attributes"
#endif // __clang__
[[gnu::optimize("Os")]] static void usage(char const *argv0);
int main([[maybe_unused]] int argc, char **argv)
{
usage(argv[0]);
}
#define ws0() " "
#define ws1() " "
#define ws2() " "
#define ws3() " "
#define ws4() " "
#define ws5() " "
#define ws6() " "
#define ws7() ws6() ws6()
#define ws8() ws7() ws7()
#define ws9() ws8() ws8()
#define ws10() ws9() ws9()
#define ws11() ws10() ws10()
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
struct bit_off { };
#pragma GCC diagnostic pop
struct bit0_on { const char a[1U << 0U]; };
struct bit1_on { const char a[1U << 1U]; };
struct bit2_on { const char a[1U << 2U]; };
struct bit3_on { const char a[1U << 3U]; };
struct bit4_on { const char a[1U << 4U]; };
struct bit5_on { const char a[1U << 5U]; };
struct bit6_on { const char a[1U << 6U]; };
struct bit7_on { const char a[1U << 7U]; };
struct bit8_on { const char a[1U << 8U]; };
struct bit9_on { const char a[1U << 9U]; };
struct bit10_on { const char a[1U << 10U]; };
struct bit11_on { const char a[1U << 11U]; };
#define bit_(b, n, v) _Generic(&(char[1U + ((n) & (1U << (size_t)b))]){0} \
, char(*)[1U + (1U << (size_t)b)]: (const struct bit##b##_on){v} \
, char(*)[1U]: (const struct bit_off){})
#define bit(b, n) bit_(b, n, {ws##b()})
#define bit_type(b, n) typeof(bit_(b, n, 0))
#define ws_type(n) struct { \
bit_type( 0, n) b0; bit_type( 1, n) b1; \
bit_type( 2, n) b2; bit_type( 3, n) b3; \
bit_type( 4, n) b4; bit_type( 5, n) b5; \
bit_type( 6, n) b6; bit_type( 7, n) b7; \
bit_type( 8, n) b8; bit_type( 9, n) b9; \
bit_type(10, n) ba; bit_type(11, n) bb; }
#define ws_init(n) { \
bit(0, n), bit(1, n), bit( 2, n), bit( 3, n), \
bit(4, n), bit(5, n), bit( 6, n), bit( 7, n), \
bit(8, n), bit(9, n), bit(10, n), bit(11, n), }
#define dog(x,y) x##y
#define cat(x,y) dog(x, y)
#define sym(x) cat(x##_,__COUNTER__)
#define c_str(x) char sym(m)[sizeof x]
#define mkarr(chr, str, arg, ...) c_str(str " " arg " ");
typedef char str_arg_max[sizeof(union {options(mkarr)})];
#undef mkarr
#define str_arg_align(x) (sizeof(str_arg_max) - sizeof x)
#define space(x) ws_type(str_arg_align(x)) sym(m)
#define space_init(x) ws_init(str_arg_align(x))
#define line_vars(chr, str, arg, help) \
const c_str(" -"); \
const c_str(", --" str " " arg); \
const space(str " " arg); \
const c_str(help);
#define line_init(chr, str, arg, help) \
{ ' ', ' ', '-', chr }, \
", --" str " " arg " ", \
space_init(str " " arg), \
help "\n",
#define help_text(x) ((const union { \
const struct { \
x(line_vars) \
const char nul[1]; \
}; \
const char str[1U + sizeof ( \
struct { \
x(line_vars) \
} \
)]; \
}){{ \
x(line_init) "" \
}}.str)
static void usage(char const *argv0)
{
(void)printf("Usage: %s [OPTIONS]\n\nOptions:\n%s",
argv0, help_text(options));
}
#ifdef __clang__
#pragma clang diagnostic pop
#endif // __clang__
@imaami
Copy link
Author

imaami commented Feb 6, 2024

On Godbolt:
https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1AB9U8lJL6yAngGVG6AMKpaAVxYMQAVgBMpBwAyeAyYAHLuAEaYxBJepAAOqAqEtgzObh7efonJNgJBIeEsUTFccZaY1qlCBEzEBOnunr4WmFZ5DDV1BAVhkdGxFrX1jZktCsM9wX3FA2UAlBaorsTI7BwApD4AzMHIblgA1BvbjhPoWFQAdAgn2BsaAIJbuwz7rkcnZwT4qDd3D2eTxel2mh1Q8Q6CggAA15ocEYikciUai0YiNl5HICHgBOGEQMAcBBE0jHHw%2BBBteJbPwo2m0slI2nxYjBAiHAgIPAKQ5U2g0inwhGY7HAjT4wkcBSk8k%2BJTAKhMVy0AiMkUU9XMiloFgsQiHBQfVAAa1ctOFGKxOIlBKJ6FltPwxEqRGIAE91bSACIASQASlraURXMgEIcmIdna6SJ6hcdreLJUTXI6Ka48OgALSoKhajU%2BUKPACy9wpZJZbMEEcOriUxEOvu9Fptzx2eCol0OZgMRlMOJ2rKYwBYkf2hmAUbww4YSRsyEO8Trt2Bg%2BIw9Hh3HRinM7neAXeGAs5d6DlWYA6sgtgAhW9Z3XxJhqzWr7ZDkdj3uT/B7iYHw4jxPTAz1pS9rx8O9INxAAOB9UBYJ8Xx8Ad33XT8t2/Xdj33Q8cNPc8L2PVws0wRCCHdLNghSMQ8AAL2iBk3w/Tdtx/accP/PDgNAilL1ZTAHx8VR4MQ58mLbNCNy/CdsNnLjAPwkDCNcBgTVnAB3Bgs2fAg2QiVwCEwBQJJeBwO0OAB6Szu2MNj%2B3FZ4vDvZziJAEAIRsfUGIgWkAHkTKFTFmy8b1DVqedDgAN1QTNawUYdMAgMM6i3AQJkOAAqOpgCijR5hOO9HPZQ5R2CXznMxG9R3dKJjFUusQOC4LAOrHLzC3BBUsy7LiFygrgQAdiKoFcTrRKIByqKqo0YKCu2EaNkG5tHJBTAaBCQ4NIUDQIGFWk5VQ0FNu2rg9oLAsjvWsFtp8c65W1FC32OzAtoUbZ7oO1FTJ2F63skT6KXRb7X0kv7tq8QGfGBmGYZ%2B7ZwYUAA2KHYbR9GMeB%2BHEcG%2B7tpR4V8b2q6Nte7aYLxhRccJqniee66ToUXFKYpmnWZJm6FC4Xb4W25maf5jnGa4M7ea5nm3u5umgUkljIwAcUcRw5Nwxdl1QuXDkV5Xf04yKgJIZSwIveIQMMecJImYhQw5CJCGMXMqBFYbjmWwqNfQzdtZVhTEhpRyrZtw47YIDQHYYZ2bzShgMpShsmCqrg5GOU4vgRDQ5GahbXebBbAUD6xg8ILhw8j6PY66%2BPE%2BTr408OJOs6jpbc5GgvbcIHxS9dqO0Bjjk44jauU%2BxU4ER8TPQsKnP3aeNui4IbYu6Wnv0v7yvB%2BcpPh7r7YJ5b6e89nvSg5DyQl5d3uK9ShPN5r1PR8OSQ96n5uZ8eOeQ68c%2BV77zrr6H2uD8vDP2zq/Q%2B79j6FxDkjb%2B5c17/1vtvB%2BSMQFNzduAj%2BhBBqwMvvAquiDAHK0OINVBB9W6QPbgQGCODV5/3wTeLehCEQwVIWA8h1soGEFxDQ3%2BA8b4MLviPIhuJWHoPYSfYuYcBDdzgXQjeAikHK25qIlu%2BcKHzxFqXZesi%2BEAPvkohuk9QFiNbGtUm89jAQAiGSBgZIorwmMPLRg0QDy%2BR8CjOOADIKHCgAweEWwkY%2BMYfonxyQGLGAIPMCI8wCqhQKsNWay0ExilGmSOOEBMqxIUbeIJgi04QDCZgCJUTYnehAD43B4UOGUJeC8CItSdjh3iTeaaSTkk2lxGkyuGSsmGLKRU2hmCCAOyoFQZpzcBoyzMWCEOVibGWkRCHSx1jDi2O7ttBp2wIjE2WpM6Zm0lkUVNnM1Z8IjmYFzFY%2B2Jy1n5T2fTcx20InumOX4qpQdtHo1FB0w5LykqHA0PM4Os1s6/OOfXIFEQuAv0TKNMF/y6RvIiChUF9tzkQEONsSF2wYUpLxPCjF0hTnB0kFPAlhw4jEoiF4XFPy0V/IxUjSFSMyX0vBYNSFg1aVJnJTBSFMFWXDPRYcTpVLcTcrhWypK3NIUJ1RUKhlItIX1OMStKZv0GZkwUMYaiBAIBvM%2BZjTG3yeWEAgIC05ZJZlcHmVas1hxEWLHnhirFlr2mmr1USvxdq9WUu9c6w4TK3WzOIba91kq9V8uDWa0V/rrUWrjWapVbrX6rQ1eY9AqBgAQFUKQd08JVCbM9A8sEog9W5vzVGLNOayT5qFq9BQ7oWA5stGWnNmzjCkFMI4PychQgABVsD%2BlMHs9NpbjBWxbXIxtzaWBZMKbmQ4hbJ5poRpq0qJo6jEGSggMgVSyQ5TJFcY98JkATr0gUvSD0Do5WvUFcB5yuwDytsYHKxhRzLpvAuqgEBVKpG7p5VI0IWCbuIMQeJ3pSlvxeKpLsIGt31qqa%2Bvqr7aBASnQU%2BiFyf0vrfR%2B%2BEWZDRYcXaoe5YN10KCfGsKdyInnotwyh2ix4W3whnRAOdiHKNMDWDqhgZrSNvV42ahjwBUPodI2R/Zr00MhGMFFOo0Iwx7qtgevqZJ%2BTxEtCa0alSz2Tq%2BlmFs2c0babxLp89271RZkM0DK2d7oY5Xmk3WFZnBlUaSnZg6N6%2BpObRKZiU5nJ0aac6Ysdm0ZNFN1Tu5TelVPAHU9SfxLmJTaKJIcWUaWMscCzLKJTOcmT0mS%2BK8shxrMHU80Dbzk4vMle%2BkVrjPGosVehlVp1hW8USg04dLEDBGShbXeYjTETMCqHLfCKAlS/3SO0f53ElS56GthrNvEqgIARbkwphZyJlsBdoQPBgKpE6NytB18VYijVYyK7p9eVsvFR2/T48NeI8QLZdktorz2JSrfW/J4gCgkunee20i7s2oPGYu%2B1nEuzl6LYh5d0733phCciYdIGJmXNu2WlcK2ZGJjPgAjFOK41gBJQHpU3quV8pQ8WhKCAhP0DzFZOyH9tJFCJXKVsLwvIqp%2BWUP230flQhCGaj10UDA/KQiAyAMXnPAp%2BA6WjKaFqhtGVGxAQD6UYnQbdqujsXYewTgcrLT2Mkdy63kpFP2qFzJO2srZeyxh%2BuwfWnyakw3RuoWd07dburPcMC7D9hTfuuwNci3xtUb4veGnc8Hl3ImxPHlj07PTekk%2BGibWnstafM3ADT0833kf/cu7o38tP8Ky%2BEAr8MvPXNoWF67KdWa9fi9MxrwK5vTttpco729FlPeIY19Jf396NenqSSj6dGvTfHgcEWLQTgXheCeA4FoUgqBODKwUMsVYr0Xg8FIAQTQs/FgmhANsXEVxJBeAlDBDQ5%2BfBlCRjBJGcR58cEkEvo/a/OC8AUCAQFh%2BK%2Bs%2BpAcAsAMAiAKACE8QdA0Q5AlAj4MBMQyAwAXA2wfgNAqo0Qf%2BViX%2BdszAHonA%2B%2BeBdQ7ofkEQ2grohBvAuobAggfkDAtA7oX%2BWABkwAjgYgtAf%2B3AvAWAo4Rg4gQBpA0YVQUUxkX%2BI2lQhk6wq%2B7IbQX%2BaGEQ64HozgWAX%2BekeALAVBiwVABgwACgAAangJgBpBLowFQTIIICIGIOwDKvwIIIoCoOoIIboH4N%2BCAKYHZPoHgBEH/pAIsBrjHJwFmOcCcN6MRMJKVn5NsKVryJeBwaVheCNnpJGFmKbOgObAeLwKgKIWBpmGIX4a0O0KkPYP7qMJ4DaoENMEUCUHoDkCkAIGUbUUkPUQwL0NUXMIUa6NUJMI0TahUFUAIF0PUG0f0KUEMN0L0eMcMVUaMRIIsFvisGsHMfoAvp/oIevhwEus/lmEjJIIcMAMgAuKgVcNDBALgIQCQOSNsFwPMLwIAVoDEqQFSEwFgDEHtKQKfmgZfl4NsNsBoL4DBDBD4LiEjHfise/rwJoZIDBFcHfriA/l4E/kjD4INFfjasvqvhsb/v/gfkfosKARAQgfQGQBQMlFAYgSgGxFwINBoDahgUZH9pQBELgcECQeYcQR6GQRQdYOYTQYwAQPQYwcwZgKwewbQJweYbwROAIavsITYKIVwavhIcgFIV/rIW/qvgoUoe6CodIXcWyJodwdoboQYUYSYabMvvvnYcIKIOILYbIA4WoF/roDam4R4eYAob4e8QEVwcET8KEeEaoJEdEcEQkfEZeEkeuKVmkRkQuBGTke6FyMEMAFkTkWyFgF6fMW0F0XYBAA4JMZUYULMTanUR0JMaWakCMbMGMf0R0EMQ0C4E0HoLWd0d0FWTUX0T0Y2ZkJ2W2TMdWcsQsTvssW/ovqQBiVkZwFsUjDsXsWxPXINLCVcFwD4ucW6FcTcXcXiYsM8a8ZQHPpwB/qQJoV4FwFcCCRoINDBJINcdsIND4F4HEBOd/hwNiQAduR8Wfl4FcEiSiVfjfnCa4ZwNsGsZiT/riUAfieAQSRAEgMqYZCQHAZNH1AoMoIYG0EIAgKgFpF/kSfjgIGhSELQJhdhc%2BUSQMMgagX4ORcQKEKwOsNQeScSX5IZCRThYIcqY8CheBcqTUPgMvrwNaVYXadINaY6U4avi6foBOO4WYF4T4fAP4ZLulEESEdsGEQdhEVmFETEWGeKQkZGSkTGYIJkWvmmXkZmaQNbCZWwP2qgC4JZUOUsZ2fxYRRhVhexfvnpJgOwIChpOuPEHieCWOc%2BRsdgKoJIeuaoNsbsfsYcfXNsCcT4o4GSGuZcXvrcRBQ8TuZgC8QMO8Z8Ylb8cVSVaVUym/keVCd%2BaCYNMVdee4iiSCeOV/liRYDifccATBXBRFSqW6EhTlKhehcRR5ZaYxYhHQPhQwG5cNaRbhUxRRVSTSTajRXRWwOBTRSxcICNeIT1VxXoTxT1XxcEOBUJbaTYaJQ6UoE6c4WftJUYLJZ4Z6YpWvspYEdlmpRpa4FpTpXEfpRGaNlGakWbCZXGYkQmUmUYKmdEOmfke8dZV5JgHZQ5c9U5TYUMK5UNWxaNQfi6L5aQP5UwIFZBcFaBZORwOFZFZcdFTObFfOdSUuSuRAClYcGlQ2BlVuZBTlXlW8QeRCced4JIFcPfkjCLWULVfeRoNIKFeBX/u%2BZzZ%2BT4ILc/n%2BdfrBIBVwOVcBaTS%2BRzdleCT4Nra1R1Y8TkckHYJIEAA%3D%3D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment