LINUX.ORG.RU
ФорумTalks

Открывается конкурс дураков на самую нечитабельную программу

 , , ,


3

3

Привет, форумчане!

Тема конкурса навеяна этим тредом и программкой http://www.ioccc.org/1984/anonymous/anonymous.c , на которую я пару-тройку месяцев назад наткнулся в каментах к этой теме.

Итак, условия конкурса на главного дурака: написать самую дурацкую и нечитабельную программу, которая, однако, нормально компилится и желательно что-то делает. В каментах указывать язык программирования, как откомпилировать и как запускать. Ну и что она вообще делает ещё можно указать. Дополнительное условие конкурса на главного антидурака: восстановить исходный код самой дурацкой программы так, чтобы он снова стал понятен. Антидурак по определению тоже является дураком, т. к. умный человек, понятно, такой хренью заниматься не будет.

Первое место в обеих номинациях каждый волен определять сам по собственной методике, желательно как можно более дурацкой.

Призов нет. Только моральные поощрения самых фееричных дураков в каментах типа «афтар, пеши исчо!»

Я, в качестве конферансье и одновременно участника, открываю конкурс своей программой на Си your_name.c, содержащей краткий комментарий, 1 инклуд (для подавления предупреждений, а так можно было бы обойтись и без него), нескольких десятков дефайнов и далее собственно программы, состоящей исключительно из знаков подчёркивания («_»), разделённых пробелами или ньюлайнами.

/**
 * The program your_name output your name.
 *
 * Module:  your_name.c
 * Compile: gcc -o your_name your_name.c
 * Call:    ./you_name
 *       or
 *          ./you_name firstname secondname thirdname ...
 * Author:  aureliano15
 * License: GPL v.3.
 * Copyleft (Ɔ) 2017.
 */
#include <stdio.h>

#define _ (
#define __ )
#define ___ ,
#define ____ [
#define _____ ]
#define ______ ;
#define _______ {
#define ________ }
#define _________ =
#define __________ <
#define ___________ *
#define ____________ +
#define _____________ -
#define ______________ **
#define _______________(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) i##p
#define ________________(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) i##p##c
#define _________________(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) p##k##g##b
#define __________________(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) e##b##m##p##c
#define ___________________(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) h##j##a##q##c##l
#define _______________________________(x) #x
#define ____________________ _______________(+,-,+,/,?,=,~,-,+,/,~,^,?,+,-,+,=,?)
#define _____________________ _______________(+,-,+,/,?,^,~,-,=,/,~,^,?,+,-,=,/,?)
#define ______________________ ________________(z,v,t,b,j,i,x,0,i,w,u,o,9,t,a,n,f,e)
#define _______________________ _________________(m,n,o,i,x,y,i,j,k,b,a,x,y,k,l,m,n,u)
#define ________________________ _________________(s,r,q,d,c,b,a,e,f,g,h,i,j,a,b,c,d,e)
#define _________________________ _______________(a,b,c,d,e,f,g,h,i,j,a,b,c,d,e,f,g,h)
#define __________________________ _________________(f,e,d,c,b,a,s,t,u,k,l,a,b,c,d,e,f,g)
#define ___________________________ ___________________(i,s,t,u,m,n,o,p,q,r,s,f,e,d,l,m,n,o)
#define ____________________________ __________________(h,g,s,t,f,f,g,h,a,b,c,d,e,r,s,t,u,0)
#define _____________________________ ___________________(t,s,r,q,p,p,q,r,s,e,i,n,m,l,s,t,u,v)
#define ______________________________ ________________(p,q,r,s,j,i,h,g,f,e,d,k,l,m,n,o,p,q)
#define ____________________________________________________ __________________(s,t,n,m,s,t,a,b,i,j,k,c,d,e,h,i,j,m)
#define ________________________________ _______________________________(%)
#define _________________________________ _______________________________(:)
#define __________________________________ _______________________________(_)
#define ___________________________________ _______________________________(a)
#define ___________________________________________________ _______________________________(d)
#define ____________________________________ _______________________________(e)
#define _____________________________________ _______________________________(i)
#define ______________________________________ _______________________________(m)
#define _______________________________________ _______________________________(n)
#define ________________________________________ _______________________________(o)
#define _________________________________________ _______________________________(r)
#define __________________________________________ _______________________________(s)
#define ___________________________________________ _______________________________(t)
#define ____________________________________________ _______________________________(u)
#define _____________________________________________ _______________________________(y)
#define ______________________________________________ _______________________________(\n)

______________________ _______________________ _ ______________________
_______________________________________________ ___ ________________________
______________ ________________________________________________ __ _______
________________________ _________________________________________________
____ ___________ ____________________________________ _____________
___________ ________________________________ _____ ______
______________________ __________________________________________________
______ _________________________ _
_______________________________________________ _____________________
___________ _______________________________________ _____________ ___________
______________________________________ __ ___________________________ _
____________________________________ _______________________________________
___________________________________________
____________________________________ _________________________________________
__________________________________
_____________________________________________
________________________________________
____________________________________________
_________________________________________ __________________________________
_______________________________________ ___________________________________
______________________________________ ____________________________________
_________________________________ __________________________________ __ ___
____________________________ _
_________________________________________________ ___ ___________
___________________________________________________ _____________ ___________
________________________________ ___
____________________________________________________ __ ___
___________________________ _ _____________________________________________
________________________________________
____________________________________________
_________________________________________ __________________________________
_______________________________________ ___________________________________
______________________________________ ____________________________________
__________________________________ _____________________________________
__________________________________________ __________________________________
________________________________ __________________________________________
______________________________________________ ___
_________________________________________________ __ ______
__________________________ _______ ___________________________ _
_____________________________________________
________________________________________
____________________________________________
_________________________________________
__________________________________ _______________________________________
___________________________________ ______________________________________
____________________________________ __________________________________
_____________________________________
__________________________________________ __________________________________
__ ______ ______________________________ _
__________________________________________________ _________ ___________
_______________________________________ _____________ ___________
______________________________________ ______
__________________________________________________ __________
_______________________________________________ ______ ____________________
__________________________________________________ __
___________________________ _ ________________________________
__________________________________________ __________________________________
___ ___________ _ ________________________________________________
____________ __________________________________________________ __ __ ______
___________________________ _ ______________________________________________
__ ______ ________ _____________________________ ___________
______________________________________ _____________ ___________
______________________________________ ______ ________

Если кому интересно, как оно работает - сами разбирайтесь. Я уже забыл, пока писал, и сам ничего понять не могу. Но как-то компилится и выполняется.

UPD от 8 апреля 2018. Оставлю-ка здесь для себя на память из этого поста, чтоб не потерялось, из той же оперы:

/**
 * Программа putrnd использует суперслучайный алгоритм для генерации
 * суперслучайного пароля. Используйте её для генерации надёжных паролей!
 *
 * Compile: gcc -o putrnd putrnd.c
 * Call:    ./putrnd
 *
 * Author:  aureliano15
 * License: GPL v.3.
 * Copyleft (Ɔ) 2018.
 */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  srand(time(0));
  int n = rand(), d1=87, d2=0, d3=3, d4=0, d5=0, d6=0, d7=0;
  n |= 175684;
  n &= 203331;
  n += 202755;
  n /= 2;
  n--;
  n >>= 2;
  while(putchar(n) && d1>=0)
  {
      d1=(d1-d2)/d3-d4+d5+d6+d7;
      d6-=d7-d6;
      if(d4)
      {
          d5+=5;
          d6-=54;
          d7+=54;
      }
      if(d2)
          ++d4;
      ++d2;
      ++d3;
      n+=d1;
  }
  d5-=5;
  return (n&d5)-d5;
}

и второй, немного более запутанный вариант:

/**
 * Программа putrndgoto использует суперслучайный и суперхитрый алгоритм
 * с метками для генерации суперслучайного пароля. Используйте её для
 * генерации надёжных паролей!
 *
 * Compile: gcc -o putrndgoto putrndgoto.c
 * Call:    ./putrndgoto
 *
 * Author:  aureliano15
 * License: GPL v.3.
 * Copyleft (Ɔ) 2018.
 */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  srand(time(0));
  int n = rand(), d1=87, d2=0, d3=3, d4=0, d5=0, d6=0, d7=0;
  goto l13;
  l01: d6-=54; goto l04;
  l02: ++d3; goto l17;
  l03: putchar(n); goto l19;
  l04: d7+=54; goto l12;
  l05: n--; goto l09;
  l06: d6-=d7-d6; goto l10;
  l07: n &= 203331; goto l15;
  l08: ++d2; goto l02;
  l09: n >>= 2; goto l03;
  l10: if(d4) goto l16; goto l12;
  l11: ++d4; goto l08;
  l12: if(d2) goto l11; goto l08;
  l13: n |= 175684; goto l07;
  l14: d1=(d1-d2)/d3-d4+d5+d6+d7; goto l06;
  l15: n += 202755; goto l21;
  l16: d5+=5; goto l01;
  l17: n+=d1; goto l03;
  l18: d5-=5; goto l20;
  l19: if(d1<0) goto l18; goto l14;
  l20: return (n&d5)-d5;
  l21: n /= 2; goto l05;
}
★★

Последнее исправление: aureliano15 (всего исправлений: 1)

Ответ на: комментарий от stevejobs

Потому что мы так разговариваем: «если у меня было пять яблок, а два я отдал Васе, сколько у меня осталось?» Ты же не говоришь: «Пусть пять равняется числу яблок у меня...»

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Пусть имеется 5 яблок у меня, и два у Васи, тогда лох тут вася, а реальный крутой пацан - я. В чем проблема? Русский - язык синтетический, а не аналитический, можно ставить слова как хочешь

В английском языке, наверное, с этим больше проблем

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

Например, в ООП языке - это язык паттернов ООП, в функциональном - их собственные идиомы

Если мы возьмем всякие лиспы, то «предложение» строится от обратного: мы заранее знаем что хотим получить, и строим команды от этого «ядра». В противоположность тому, как в импертивных языках мы берем начальное состояние и начинаем разматывать его до предполагаемого ожидаемого конца.

Или например,

const liftA2 = (f) => (a, b) => a.map(f).ap(b)

const mult = a => b => a * b

const liftedMult = liftA2(mult) // теперь функция работает на функторах типа массива

liftedMult([1, 2], [3]) // [3, 6]
liftA2((a, b) => a + b)([1, 2], [3, 4]) // [4, 5, 5, 6]

в данном случае ты видишь пример lifting — это когда значение помещается в объект вроде функтора. Если «поднять» (lift) функцию в аппликативный функтор, то можно заставить ее работать со значениями, которые также присутствуют в функторе.

то есть, когда думаешь на языке программирования, у тебя мышление меняется относительно русского языка в сильно большем скоупе, чем какую циферку писать первой при проверке :)

stevejobs ★★★★☆
()
Ответ на: комментарий от i-rinat

а если ты начал думать на английском языке вместо русского, это профдеформация или нет? А если на китайском или олбанском?

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

На каком-то из этих языков порядок обратный?

Тут ситуация как с первым айфоном. Он был прикольный, и его много народу купило. Это уже потом выяснилось, что толком ничего не может. Выбрасывать что-то, за что отдано 800 баксов как-то очень жалко, поэтому народ начал выдумывать применения. Чтобы не признавать, что деньги были выброшены зря. Так и ты, будучи вынужден постоянно писать условия сравнения наоборот, сейчас пытаешься представить это как фичу.

i-rinat ★★★★★
()
Ответ на: комментарий от Deleted

Увы, шизофазики с шизофизиками давно уже правят миром, уже нормальная нормальность требует лечения, ибо напрягает носителя.

ilovewindows ★★★★★
()
Ответ на: комментарий от i-rinat

в русском языке ты читаешь предложение с начала до конца, а в английском - с середины. Есть теория, что именно этим объясняется такая дикая популярность у америкосов упражнений на «скорочтение», когда предлагается сканировать взглядом всё предложение сразу (ща погуглил, пруфлинка не нашел, печаль :( ).

В английском - более сложная «линия времени» с маппингом на времена глагола, и как следствие этих различий, например, в английском языке есть перфектное настоящее время, а в русском - нет. При переключении на английский, тебе придется поменять время события на другое.

По твоей классификации, начать думать по-английски - это жуть какая профдеформация!

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Если ты начал в русском языке говорить, когда описываешь мебель: «там есть стол, стул и кровать в нашей комнате», то да, ты иметь профессионально деформировался.

i-rinat ★★★★★
()
Ответ на: комментарий от stevejobs

а если у меня весь код написан на присвоениях внутри if?

Если там что-то такое:

if (f = fopen(name, mode)) { }

То нужно писать так:

if ((f = fopen(name, mode))) { }

Или так:

if ((f = fopen(name, mode)) != 0) { }

О чем компилятор и говорит.

andreyu ★★★★★
()

Я сдаюсь, может кто-нибудь сказать хотя бы о том, как вот это распарсить?

#define _______________(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) i##p
Kronick
()
Ответ на: комментарий от xwicked

Я там писал сразу обфусцированный код, а потом переписывал по-человечески,

Это совсем тяжело. Я наоборот сначала писал по-человечески, а потом обфусцировал, причём оставляя до поры до времени куски исходного кода в виде комментариев, чтоб окончательно не запутаться самому. :-)

но пока части обфускации ещё остались :D

А ссылка на него существует или это закрытый проект?

aureliano15 ★★
() автор топика
Ответ на: комментарий от Serge10

Тетрис на sed.

Да, я на него не так давно уже нарыкался в каком-то другом треде на этом форуме и тогда же скачал. Прикольный тетрис, согласен. Впрочем, на sed'е написать что-то совершенно непонятное труда не составляет. Для седа надо объявлять противоположные конкурсы: написать на седе понятную читабельную программу размером не менее 50 строк. Уверен, такое задание мало кто осилит. :-)

aureliano15 ★★
() автор топика
Ответ на: комментарий от EXL

http://paste.org.ru/?ez2g8z

Самое смешное, что есть люди, которые на полном серьёзе считают, что именно такого рода идентификаторы и должны быть в любой нормальной программе. :-)

Единственно настораживает, что во множественных вложенных циклах по i ... w в общей сложности создаётся объектов FacadeListenerStrategyFactoryBuilderFactoryBeanVisitorAdvisor, как я посчитал, 8.21429036973e+85 штук, и это только в одном месте, а не во всех, где эти циклы разбросаны. Современное железо такое стопудово не потянет. Но в будущем, когда объём памяти увеличится на порядки, уверен, все так и будут писать. :-)

aureliano15 ★★
() автор топика
Ответ на: комментарий от WereFox

Первая - функция, вторая - eё вызов.

Да, ступил, извиняюсь. Антидурак из меня никакой. :-)

aureliano15 ★★
() автор топика
Ответ на: комментарий от i-rinat

Ничего не делает.

Спасибо за ответ. Я так и предполагал, что ничего.

«„[+-(&&$ < &&_)]; // - расширение GCC computed goto, сравниваются адреса меток

А вот это полезная фича для печати адресов произвольных участков кода (а не только функций) из исходника на си, а я даже и не знал о таком. Надо подучить матчасть.

aureliano15 ★★
() автор топика
Ответ на: комментарий от Kronick

как вот это распарсить?

#define _______________(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) i##p

Это склейка лексем. Например, макрос

#define mkvar(s, n) s##n

при вызове

mkvar(var, 1)

создаст идентификатор var1.

В моём случае используются параметры i и p, а остальные игнорируются и нужны только для того, чтоб никто не догадался. Если убрать их из описания макроса и из тел других макросов, где используется этот (ну и аналогичных макросов с 3 и более используемыми аргументами), то проявятся такие цепочки, как ___...(i,f), ___...(i,n,t), ___...(p,r,i,n,t,f) и т. д., и всё сразу станет более-менее понятно.

А директива препроцессора

#x
превращает аргумент x в строку. Т. е. если написать макрос

#define printint(var) printf(#var "=%i\n", var)

то выражение

printint(var);
превратится в
printf("var" "=%i\n", var);
Очень удобно для отладки ... и для запутывания. :-)

aureliano15 ★★
() автор топика
Ответ на: комментарий от aureliano15

А ссылка на него существует или это закрытый проект?

А я говорил всем, что обо мне никто не знает. В профиле изменил ссылку, там нужно будет выбрать Архив.
«обфускация» в моём контексте означало быдлокод сравнимый с начальной обфускацией. Я переписывал код и прямо вырезая по 5-10 строк без потери функционала и офигевал, с того, как оно работало.

xwicked ★★☆
()

Я выиграл Моя прогамма делает ничего и её невозможно прочесть, а так как победитель самый нечитабельный, то я выиграл потому что то чего нет прочесть невозможно. Где мои подарки, аплодисменты, деньги и куртизантки? Я жду.

Dron ★★★★★
()
Ответ на: комментарий от stevejobs

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

А когда я пишу на С я думаю - что нужно делать и как - обычным мышлением имея исключительно логические цепи в голове для построения программы, а всякие многоуровневые языковые абстракции (созданные для упрощения написания кода) в итоге ломают простоту и чистоту. Я признаю что ОПП мне не даётся в виду того что я привык к процедурщине, но всё же.

В добавок к этому, если я использую велик я не думаю на языке велика или если я работаю за станком я не демаю на языке станка, так же и с программированием, думать вообще полноценно можно только на чём то родном, тем чем ты пропитан. Даже говоря на другом языке говорить то можно, а вот помечтать и поразмышлять о былом или фантазировать юморные ситуации уже не то.

Dron ★★★★★
()
Последнее исправление: Dron (всего исправлений: 1)
Ответ на: комментарий от xwicked

В профиле изменил ссылку, там нужно будет выбрать Архив.

«обфускация» в моём контексте означало быдлокод сравнимый с начальной обфускацией.

Скачал последнюю версию 2.3-src и первую доступную версию 0.1.4-lin-src. Всё, конечно, не изучал, но открыл модули main.cpp и ещё пару случайных модулей: всё по-моему читабельно, красиво и даже с какими-ни какими комментариями, что в наше время - редкость. Не знаю, что там было изначально, но, имхо, сейчас на вскидку всё Ok в плане читабельности.

aureliano15 ★★
() автор топика
Ответ на: комментарий от Dron

Где мои подарки,

Вот тебе самолёт в подарок: ✈

деньги

€€€ - это 3 евро. Если мало, могу добавить.

аплодисменты,

и куртизантки?

☝⚇☝

Ну а это - аплодирующая куртизанка. :-)

aureliano15 ★★
() автор топика
Ответ на: комментарий от Dron

Я признаю что ОПП мне не даётся в виду того что я привык к процедурщине

Т. е., иначе говоря, ты признаёшь, что язык определяет мышление.

если я использую велик я не думаю на языке велика или если я работаю за станком я не демаю на языке станка

Потому что велик и станок языками не являются. Но вот если ты начнёшь писать программу для станка с ЧПУ, то тебе волеё не волей придётся думать на используемом языке с учётом аппаратных особенностей цпу твоего станка (разные там регистры, порты и т. д.)

Даже говоря на другом языке говорить то можно, а вот помечтать и поразмышлять о былом или фантазировать юморные ситуации уже не то.

Это потому что ты к другому языку ещё не привык. Родным и самым первым языком моей бабушки был идиш, но в конце жизни она уже не могла на нём не то что думать, но даже говорить, хоть и понимала.

aureliano15 ★★
() автор топика
Ответ на: комментарий от aureliano15

Лямба с переменным числом аргументов, внутри, кажется, метка, по ней лямбда, внутри у которой метка, потом метка _ по которой пустая лямбда, потом индексация строки единичкой, ибо адреса меток сравниваются, лямбда вызывается, внешняя тоже вызывается, аргумент внешней — пустая лямбда.

evilface ★★
()
Ответ на: комментарий от aureliano15

Т. е., иначе говоря, ты признаёшь, что язык определяет мышление.

Разговорный да, языки программирования нет. Я предвзят тут, да.

Dron ★★★★★
()
Ответ на: комментарий от Dron

иначе говоря, ты признаёшь, что язык определяет мышление.

Разговорный да, языки программирования нет.

А как же тогда понимать реплику

Я признаю что ОПП мне не даётся в виду того что я привык к процедурщине

Из неё выходит, что ты мыслишь в парадигме процедурных языков, и это мешает тебе перейти на ООП. А вот если бы ты сделал над собой усилие и освоил какой-нибудь ооп-язык (причём включая ооп возможности), то мышление твоё поменялось бы и ты бы смог писать ооп-программы. Я именно так понял эту реплику.

aureliano15 ★★
() автор топика
Ответ на: комментарий от aureliano15

Я потом только увидел. Зато «проверил себя». Первую функцию только почему-то за лямбду принял.

evilface ★★
()
Ответ на: комментарий от aureliano15

Не мне просто не нравится ООП, ну в смысле я пишу на томже самом php например иногда, классы, сахар все дела, но он мне не нравиться просто как и C++. Но частично да признаю, не мышление полностью, а подход к мышлению имеет место быть

Dron ★★★★★
()
Ответ на: комментарий от Dron

я пишу на томже самом php например иногда, классы, сахар все дела, но он мне не нравиться просто как и C++.

В небольших программках ооп не даёт никаких преимуществ, кроме возможности воспользоваться готовыми классами. Но разрабатывать свои смысла нет - себе дороже обойдётся.

А вот в больших проектах дополнительные усилия на разработку и тестирование собственных классов могут с лихвой окупиться. Правда, в больших проектах есть свои подводные камни, связанные с ооп. Какие - повторяться не буду, я своё мнение на этот счёт высказал в другом треде. Там же нашлись и несогласные с этим мнением.

aureliano15 ★★
() автор топика

Ну вроде должно работать

#include <stdio.h>
#define a b
#define b a
#define c d
#define d c
#define a d
#define d a
#define a c
#define wigehpw _________--std--
#define o b
#define gheo13hi5o_____215bhwirjop o
#define define \n
#define define ddefine
#define ddefine dddefine
#define dddefine VO25geq32y2y3LT1wAGE
#define wpqjifpw1ith109 129
int main(void){
   int a = 0;
   int b = 0;
   int c = 0;
   int d = 0;
scanf(“%d”, &a); 
scanf(“%d”, &gheo13hi5o_____215bhwirjop); 
scanf(“%d”, &c); 
scanf(“%d”, &d); 
printf("a = %d, b = %d, c = %d, d = %d, VO25geq32y2y3LT1wAGE", a, b, c, d, wpqjifpw1ith109);
}
valman___
()
Ответ на: Ну вроде должно работать от valman___

Ну вроде должно работать

Не работает. Куча предупреждений и замечаний и 1 ошибка:

valman___.c: В функции «main»:
valman___.c:7:11: ошибка: переопределение «a»
 #define d a
           ^

Ниже полный лог компиляции:

$ gcc -o valman___ valman___.c
valman___.c:6:0: предупреждение: «a» переопределён
 #define a d
 ^
valman___.c:2:0: замечание: это расположение предыдущего определения
 #define a b
 ^
valman___.c:7:0: предупреждение: «d» переопределён
 #define d a
 ^
valman___.c:5:0: замечание: это расположение предыдущего определения
 #define d c
 ^
valman___.c:8:0: предупреждение: «a» переопределён
 #define a c
 ^
valman___.c:6:0: замечание: это расположение предыдущего определения
 #define a d
 ^
valman___.c:13:0: предупреждение: «define» переопределён
 #define define ddefine
 ^
valman___.c:12:0: замечание: это расположение предыдущего определения
 #define define \n
 ^
valman___.c: В функции «main»:
valman___.c:7:11: ошибка: переопределение «a»
 #define d a
           ^
valman___.c:4:11: замечание: in expansion of macro «d»
 #define c d
           ^
valman___.c:8:11: замечание: in expansion of macro «c»
 #define a c
           ^
valman___.c:3:11: замечание: in expansion of macro «a»
 #define b a
           ^
valman___.c:19:8: замечание: in expansion of macro «b»
    int b = 0;
        ^
valman___.c:7:11: замечание: здесь было предыдущее определение «a»
 #define d a
           ^
valman___.c:4:11: замечание: in expansion of macro «d»
 #define c d
           ^
valman___.c:8:11: замечание: in expansion of macro «c»
 #define a c
           ^
valman___.c:18:8: замечание: in expansion of macro «a»
    int a = 0;
        ^
aureliano15 ★★
() автор топика
Ответ на: комментарий от aureliano15

Вот так что ли?

#include <stdio.h>
#define a b
#define b a
#define c d
#define d c
#define a d
#define d a
#define a c
#define wigehpw _________--std--
#define o b
#define gheo13hi5o_____215bhwirjop o
#define define \n
#define define ddefine
#define ddefine dddefine
#define dddefine VO25geq32y2y3LT1wAGE
#define wpqjifpw1ith109 129
int main(void){
scanf(“%d”, &a); 
scanf(“%d”, &gheo13hi5o_____215bhwirjop); 
scanf(“%d”, &c); 
scanf(“%d”, &d); 
printf("a = %d, b = %d, c = %d, d = %d, VO25geq32y2y3LT1wAGE", a, b, c, d, wpqjifpw1ith109);
}
valman___
()
Ответ на: Вот так что ли? от valman___

Опять мимо. На этот раз 3 ошибки с кучей предупреждений и замечаний:

valman___2.c:6:0: предупреждение: «a» переопределён
 #define a d
 ^
valman___2.c:2:0: замечание: это расположение предыдущего определения
 #define a b
 ^
valman___2.c:7:0: предупреждение: «d» переопределён
 #define d a
 ^
valman___2.c:5:0: замечание: это расположение предыдущего определения
 #define d c
 ^
valman___2.c:8:0: предупреждение: «a» переопределён
 #define a c
 ^
valman___2.c:6:0: замечание: это расположение предыдущего определения
 #define a d
 ^
valman___2.c:13:0: предупреждение: «define» переопределён
 #define define ddefine
 ^
valman___2.c:12:0: замечание: это расположение предыдущего определения
 #define define \n
 ^
valman___2.c: В функции «main»:
valman___2.c:7:11: ошибка: «a» undeclared (first use in this function)
 #define d a
           ^
valman___2.c:4:11: замечание: in expansion of macro «d»
 #define c d
           ^
valman___2.c:8:11: замечание: in expansion of macro «c»
 #define a c
           ^
valman___2.c:18:14: замечание: in expansion of macro «a»
 scanf("%d", &a); 
              ^
valman___2.c:7:11: замечание: each undeclared identifier is reported only once for each function it appears in
 #define d a
           ^
valman___2.c:4:11: замечание: in expansion of macro «d»
 #define c d
           ^
valman___2.c:8:11: замечание: in expansion of macro «c»
 #define a c
           ^
valman___2.c:18:14: замечание: in expansion of macro «a»
 scanf("%d", &a); 
              ^
valman___2.c:8:11: ошибка: «c» undeclared (first use in this function)
 #define a c
           ^
valman___2.c:7:11: замечание: in expansion of macro «a»
 #define d a
           ^
valman___2.c:4:11: замечание: in expansion of macro «d»
 #define c d
           ^
valman___2.c:20:14: замечание: in expansion of macro «c»
 scanf("%d", &c); 
              ^
valman___2.c:4:11: ошибка: «d» undeclared (first use in this function)
 #define c d
           ^
valman___2.c:8:11: замечание: in expansion of macro «c»
 #define a c
           ^
valman___2.c:7:11: замечание: in expansion of macro «a»
 #define d a
           ^
valman___2.c:21:14: замечание: in expansion of macro «d»
 scanf("%d", &d); 
              ^

И это я не считаю неправильных кавычек в scanf, которые сам 2 раза исправлял. А своего компилятора нет?

aureliano15 ★★
() автор топика
Ответ на: комментарий от valman___

Увы. Писал от балды.

Вспомнилась цитата из самого начала 2 тома Кнута (стр. 18 по изд. 77 года):

Мораль этой истории заключается в том, что случайные числа нельзя вырабатывать с помощью случайно выбранного алгоритма. Нужна какая-нибудь теория.

aureliano15 ★★
() автор топика
Ответ на: комментарий от aureliano15

Там походу -std=gnu++11 (кто-то -pedantic забыл):

void * $() {                            // declaration of function named $ returning void *
    [&](...) {                          // lambda(1) catching all symbols by reference and taking any arguments
        $:                              // label named $
        []() {                          // empty lambda(2) with empty catch list
            ({                          // scope opens
                $: ;                    // another label named $
                _:                      // label named _
                    []() {},            // empty lambda(3) followed by the comma operator
                    ""[                 // empty null-terminated string with the subscript operator
                        +               // unary plus operator -- noop
                        -               // unary minus operator
                        (&&$ < &&_ )    // logical operation on labels addresses (GCC extension)
                    ];                  // end of the subscript operator
            });                         // scope closes
        }();                            // end of lambda(2) and an immediate call with no arguments
    }(                                  // end of lambda(1) and an immediate call with single argument
        [=](){}                         // empty lambda(4) catching all symbols by value
    );                                  // end of lambda(1) call parentheses
}                                       // end of function named $

Вот g++ истолоковал

$ g++ -Wall -Wextra -std=c++11 -pedantic -c it.cpp

it.cpp: In lambda function:
it.cpp:3:9: warning: label ‘$’ defined but not used [-Wunused-label]
         $: [](){
         ^
it.cpp: In function ‘void* $()’:
it.cpp:14:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
elvenfighter /tmp/code $ g++ -Wall -Wextra -std=c++11 -pedantic -c it.cpp 
it.cpp: In lambda function:
it.cpp:4:13: warning: ISO C++ forbids braced-groups within expressions [-Wpedantic]
             ({
             ^
it.cpp:9:30: warning: taking the address of a label is non-standard [-Wpedantic]
                         +-(&&$ < &&_ )
                              ^
it.cpp:9:36: warning: taking the address of a label is non-standard [-Wpedantic]
                         +-(&&$ < &&_ )
                                    ^
it.cpp: In lambda function:
it.cpp:3:9: warning: label ‘$’ defined but not used [-Wunused-label]
         $: [](){
         ^
it.cpp: In function ‘void* $()’:
it.cpp:14:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 3)
Ответ на: комментарий от peregrine

Почитайте исходники LibreOffice/OpenOffice.

Боюсь, на чтение этих исходников жизни может не хватить. Приходилось как-то давно собирать OpenOffice. И собирался он на довольно мощной по тем временам машине 4 или 5 часов + требовал какого-то другого make по-моему + по сборочным зависимостям там шла туева хуча разных компиляторов, помимо gcc, я запомнил только mono.

aureliano15 ★★
() автор топика
Ответ на: комментарий от KennyMinigun

https://pastebin.com/hEhAxCnm

jsfuck.com

Я думал, что это просто прикол, а это оказывается целая школа программирования на js с помощью квадратных скобок, и даже компиляторы готовые есть, переводящие js в скобки. :-)

aureliano15 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.