#Box drawing C macros elimination tests
1 messages · Page 1 of 1 (latest)
gcc -finput-charset=UTF-8 -fextended-identifiers
gcc -finput-charset=UTF-8 -fextended-identifiers -fexec-charset=UTF-8
;compile C -finput-charset=UTF-8 -fextended-identifiers -fexec-charset=UTF-8
#include <stdio.h>
#define ╔
#define ║
#define ╚
#define ═
#define ╗ {
#define ╝ }
╔═══════════════════ int main() ════════════════╗
║ printf("hello"); ║
║ return 0; ║
╚═══════════════════════════════════════════════╝
Compiler Output
<source>:2:9: error: macro names must be identifiers
2 | #define ╔
| ^
<source>:3:9: error: macro names must be identifiers
3 | #define ║
| ^
<source>:4:9: error: macro names must be identifiers
4 | #define ╚
| ^
<source>:5:9: error: macro names must be identifiers
5 | #define ═
| ^
<source>:6:9: error: macro names must be identifiers
6 | #define ╗ {
| ^
<source>:7:9: error: macro names must be identifiers
7 | #define ╝ }
| ^
<source>:9:1: error: stray '\342' in program
9 | <U+2554><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550> int main() <U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2557>
| ^~~~~~~~
<source>:9:2: error: stray '\342' in program
9 | <U+2554><U+2550><U+2550><U+
fd26 | c | x86-64 gcc 14.2 | godbolt.org
;compile C -finput-charset=UTF-8 -fextended-identifiers -fexec-charset=UTF-8
#include <stdio.h>
#define \u2554
#define \u2551
#define \u255A
#define \u2550
#define \u2557 {
#define \u255D }
/*
#define ╔
#define ║
#define ╚
#define ═
#define ╗ {
#define ╝ }
*/
╔═══════════════════ int main() ════════════════╗
║ printf("hello"); ║
║ return 0; ║
╚═══════════════════════════════════════════════╝
Compiler Output
<source>:2:9: error: universal character \u2554 is not valid in an identifier
2 | #define \u2554
| ^
<source>:3:9: error: universal character \u2551 is not valid in an identifier
3 | #define \u2551
| ^
<source>:4:9: error: universal character \u255A is not valid in an identifier
4 | #define \u255A
| ^
<source>:5:9: error: universal character \u2550 is not valid in an identifier
5 | #define \u2550
| ^
<source>:6:9: error: universal character \u2557 is not valid in an identifier
6 | #define \u2557 {
| ^
<source>:7:9: error: universal character \u255D is not valid in an identifier
7 | #define \u255D }
| ^
<source>:16:1: error: stray '\342' in program
16 | <U+2554><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550> int main() <U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+25
fd26 | c | x86-64 gcc 14.2 | godbolt.org
you would need to run perl on it or something before, macro won't work
The only way I can make this work is using perl -pi.bak -e "s/...//gm;" main.c then run gcc instead of #define macros 🤷♂️
UTF-8 Bash only, broken in MS-DOS console:
perl -pi.bak -e "s/[ ]*(#define)[ ]+[╔║╚═╝╗]+.*$//gm;s/[╔║╚═]+//gm;s/[╗]/{/gm;s/[╝]/}/gm;" main.c
# Same program long verbose formatting of implicit accumulator stdin execute then print in place loop
while($_ = <STDIN>)
{
$_ =~ s/[ ]*(#define)[ ]+[╔║╚═╝╗]+.*$//gm;
$_ =~ s/[╔║╚═]+//gm;
$_ =~ s/[╗]/{/gm;
$_ =~ s/[╝]/}/gm;
print $_;
}