Короткий нечитаемый код

Раз уж раздел такой, пусть будет и тема отвлеченная.

Написать большой нечитаемый код или сделать код нечитаемым, специально обозвав переменные - много ума не надо.

Даешь коротыхи!

Начну, пожалуй, с такого: “Простой способ нарисовать пятнадцать плюсиков”. GCC, само-собой. Сорян за то, что в одну строчку :slight_smile:

#include <stdio.h>

int main() {
  int val = 8;
  return ({do { /* +++++++++++++++ */ } while((val = ({ for (int $=0; $ < val; $++) putchar('+'); val >> sizeof(void); })) > 0);0;}) ? : ':' , '?';
}

PS: Если не в одну строчку, то тоже работает но компилируется с варнингом, который я первый раз в жизни увидел

Отец головоломок это @ЕвгенийП . Вот кто может написать такое, что без бутылки не разберёшся)))
Меня однажды почти убедили что это C++. Но нет, не верь им! Это магия какая-то.

1 лайк

Ворота на старом форуме приводил пример на препроцессоре. Вот там было сурово.)

А я-то тут каким боком? Я такого не пишу. Я, если пишу для форума, то под местное IDE (для того его и держу). А здесь написано под хрен знает что. Я вот не знаю компилятора, который бы такое съел. Из тех, что есть у меня – не ест ни один.

Странно.

Вот скомпилировал под Виндовс, i386

Тут же скомпилировал компилятором изкаропки, Arduino IDE, target=esp32s3

Все компилируется. И работает.

Я ж написал, что это для GCC только. Наверняка у тебя он есть, хоть где-то :slight_smile:

Ну, поздравляю. У меня не компилируется ничем (если искаропки).

@ЕвгенийП , я так понимаю, Вас на слабо брать бессмысленно? Наверно и не культурно. Поэтому не буду))) Нет, так нет))

Можно скриншотик, на что ругается? Интересно стало.

Евгений не в настроении, видимо :(.

А я-то думал, что кто-то заметит $ в имени переменной, compound statement (в таких вот скобках “({”), тернарную операцию по умолчанию…

Но нет.

:disappointed_relieved:

А оно нам надо?

1 лайк

А сами точно не догадываетесь?

D:\GoogleD\Soft\Kaka\kaka2\kaka2.ino: In function 'int main()':
D:\GoogleD\Soft\Kaka\kaka2\kaka2.ino:5:117: warning: invalid application of 'sizeof' to a void type [-Wpointer-arith]
   return ({do { /* +++++++++++++++ */ } while((val = ({ for (int $=0; $ < val; $++) putchar('+'); val >> sizeof(void); })) > 0);0;}) ? : ':' , '?';
                                                                                                                     ^
c:/users/eugene/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32s3-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: C:\Users\Eugene\AppData\Local\arduino\sketches\2FEA91F6B0C2D7A284F64E5331B7DFE0\core\core.a(main.cpp.o):(.literal._Z8loopTaskPv+0x8): undefined reference to `setup()'
c:/users/eugene/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32s3-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: C:\Users\Eugene\AppData\Local\arduino\sketches\2FEA91F6B0C2D7A284F64E5331B7DFE0\core\core.a(main.cpp.o):(.literal._Z8loopTaskPv+0xc): undefined reference to `loop()'
c:/users/eugene/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32s3-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: C:\Users\Eugene\AppData\Local\arduino\sketches\2FEA91F6B0C2D7A284F64E5331B7DFE0\core\core.a(main.cpp.o): in function `loopTask(void*)':
C:\Users\Eugene\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\cores\esp32/main.cpp:42: undefined reference to `setup()'
c:/users/eugene/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32s3-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32s3-elf/8.4.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: C:\Users\Eugene\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\cores\esp32/main.cpp:48: undefined reference to `loop()'
collect2.exe: error: ld returned 1 exit status

exit status 1

Compilation error: exit status 1```

Её замечают все нормальные компиляторы (тот же gcc с нормальными опциями – попробуйте в том же иде, но для avr или в microsoft visual studio). Это нарушение стандарта в расчёте на расширение компилятора – такое неинтересно замечать.

Да все у вас компилируется.
Просто линкер ругается на функции отсутствующие.

setup() и loop().

А настройки предупреждений у Arduino IDE, конечно, атас.

Ужасный вы привереда.

Вот так попробуйте (проверил, работает):

#include <Arduino.h>

  int the_main() {
    int val = 8;
    return ({ do { /* +++++++++++++++ */ } while((val = ({for (int $=0; $ < val; $++) putchar('+'); val >> sizeof(void); })) > 0);0;}) ? : ':' , '?';
  }

void setup() {  Serial.begin(115200); }
void loop() {  the_main(); delay(9999); }

ЗЫЖ
sizeof(void) == 1 :). Не знаю, как вас, а меня это всегда изумляло.

Я не привереда, я просто привык к точности в выражениях. Если оно не работает, то не работает а уж линкер там придирается или ещё кто-то, какая разница.

Не могу, у меня не на чем запускать. Для AVR она у Вас не компилируется, а ESP у меня нет. Так что я могу только компилировать, я это уже делал. Кроме того, поверьте, мне неинтересен этот код, в нём нет ничего, что мне бы привлекло и что было бы ново для меня.

Это, на самом деле, зависит от реализации. Некоторые вообще кроют матом и отказываются такой бред компилировать. И, кстати, я уже объяснял в чём там фишка, причём объяснял лично Вам.

фишка там в другом совсем.
из-за той же фишки sizeof(function) тоже равен 1.

это следствие.
побочный эффект.