Почему-то компилируется. Помогите!

Не ожидал такой чисто “быдляцкой” выходки… странно.
Остроумные задачи в математике или физике, остроумные примеры программ делаются с той же целью, с которой пишут стихи: для удовольствия.
Зачем стихи? Зачем искать слова так, чтобы ритм ударений повторялся и окончания слов были похожи? Нафига это нужно, если можно сказать всё тоже самое не вы…бываясь?

Удовольствие от хитрого кода, от квайна или от удачного алгоритма - ровно тоже самое, что от умения жонглировать, или изучения редкого языка - просто удовольствие от разминки тела или мозга. Именно “Смотри, как я могу!” - это самый важный мотиватор. Даже зритель, как таковой, не всегда нужен, можно показать самому себе и Б..гу.
Как-то так, сорри.

(Немного занудно будет. Андриано должно понравится!)

Нет, это не так. Преимущество это выполнение в нарушение порядка чтения. Например в выражении 3 + 5 * 2 сперва читаем сложение, а выполняем умножение. Так вот все операторы, кроме возведения в степень, левоассоциативны. a * b * c = (a*b)*c. Из тех, что есть в Си, только присваивание и тернарный правоассоциативны. То есть выполняются в нарушении порядка чтения. Так что шутка, которую ты привел, не совсем верна, хоть и известна.

всем раздал :sweat_smile:

Репутация в наше время - это всё. Её поддерживать надо. :smiling_face_with_sunglasses:

надо делать так что бы не фига не поняли!))) и не говорить что и как… я попробую, спс)))
только если программа .exe и получают код на ассемблере, они могут украсть функцию, и вот от этого и нужна защита)))

int* x;
void setup() {
x = (int*)36;
*x |= 32;
x = (int*)35;
}
void dot() {
*x |= 32;  delay(100);
*x &= ~32; delay(100);
}
void dash() {
*x |= 32;  delay(300);
*x &= ~32; delay(100);
}
void loop() {
const unsigned short morse[] = {
0b0000, 4,
0b0, 1,
0b0010, 4,
0b0010, 4,
0b0111, 3, 
0, 0,
0b110, 3,
0b0111, 3,
0b010, 3,
0b0010, 4,
0b001, 3,
0, 0
};
for(int i = 0; i < sizeof(morse) / 4; i += 2) {
unsigned short code = morse[i];
int len = morse[i+1];
if(len == 0) { delay(400); continue; }
for(int b = 0; b < len; b++) {
if(code & (1 << b)) dash();
else dot();
} delay(200); }
delay(2000); }

Туда и не то можно воткнуть. Всё дел в том, какой в этом смысл? Вот, в шикарном примере «Duff’s device» всё втыкалось со смыслом* - это действительно кратчайшая и самая эффективная запись этого алгоритма. Изучите!

А вообще, приятно видеть человека, которого впечатляют такие вещи! Это же, блин, поэзия! Не каждый её чувствует (как и обычную поэзию, кстати).

А вот сейчас не понял. В чём именно Вам нужна помощь?

* Это к бессмертному призыву “Иваси”: “И водку бессмысленно больше не жрать, а жрать её только с особенным смыслом!

Сарьказьм енто был на вечную тему о призыве на помошь при неудавшейся компиляции от новичков. Шутка такскть. Но “лагадобря”(Масяня) неудачливому стечению обстоятельств, прям как одновременный выход фильмов по осени,(разбор полётов в теме ИИ и последующей грызнёй чипындейла и графа) зацепило и остальных :slightly_smiling_face:

Пора, думаю, дополнительный подраздел заводить: «Юмор».

Ага.
И к нему подраздел - “Обьясняем соль шутки”

https://opennet.ru/opennews/art.shtml?num=65641
Изучайте, это в тему.

Просто ужас!)

Привет!

А вы знали, что в компиляторе GCC (да, и в вашей любимой среде Arduino - тоже) есть встроенным режим бейсика?

БЕЙСИК ВИЛЬНЮС '88

Ну нет, конечно, поновее. Вот пример, в котором код, как ему и положено , исполняется в порядке нумерации строк:

#include <stdio.h>

typedef int BASIC[];   /* <-- Пытаемся включить режим бейсика */

int main() {

  if ((BASIC) { /* <-- Если включилось - исполняем нашу программу */
    [20] puts("cruel"),
    [30] puts("world"),
    [10] puts("hello"),
  });

}

Программа выведет:

hello
cruel
world

В какой среде Ардуино компилируется код из примера?

Для UNO и IDE 1.8.19 у меня при компиляции ошибки.

Это от того, что вы компилятор G++ используете. А не GCC:

Первая строчка - компилируем GCC, все ок.

Вторая строчка - компилируем G++, обосрамшись.

Сделайте отдельный файлик, с расширением .c, поместите в него этот код, сам файлик положите рядом с .ino файлом. Тогда среда Ардуино должна все это схавать:

.ino:

#include <Arduino.h>
#include <stdio.h>




void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

extern "C" void hello_cruel_world();

void loop() {
  // put your main code here, to run repeatedly:
  hello_cruel_world();   

}

.c:

#include <stdio.h>

typedef int BASIC[];

void hello_cruel_world() {

  if ((BASIC) {
    [20] puts("cruel"),
    [30] puts("world"),
    [10] puts("hello"),
  });

}

Работает и компилируется в Arduino IDE. (ESP32, если что)

это вроде не бейсик)))

Потому что GCC — это не просто стандартный компилятор Си, а компилятор языка GNU C, который расширяет стандарт специально для удобства программистов и совместимости с ядром Linux.

Эти вольности позволяют писать более компактный и гибкий код (особенно в макросах и системном программировании), поэтому разработчики GCC их и добавили — даже ценой того, что такой код не будет работать в других компиляторах или в C++.

а в компиляторе C++ эти фичи если и есть могут делать что то другое…
короткая справка от ии, продолжаю вести наблюдение)))

Опять публикуете особо ценное мнение “алисы”. Вы правда уверены, что никто, кроме Вас не в состоянии спросить у ИИ?

@vvb333007, в каких руководствах GCC про это хоть что-то написано? Поделитесь ссылочкой, пожалуйста, а то я что-то не встречал.

а вдруг кто подумает что компилятор С++ хуже ? что тогда ?)))

Работает в Wokwi. Что интересно, файл .с инклюдить не надо :face_with_monocle: