Говнокод

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

На амперке вылезла пронафталиненная дискуссия за goto. Примерчик оттуда (вдруг кому пригодится :-)

static  void * shitLabel;

static void shitCode(void) {
    goto * shitLabel;
}

void setup() {
    Serial.begin(57600);
    shitLabel = && fin;
    goto *((void *) shitCode);
    Serial.println("Show must go on!");
    return;
fin:
    Serial.println("Okay, Houston, we've had a problem here!");
}

void loop(void) {}

В IDE 1.8.12 работает на ура.

sadman41
Offline
Зарегистрирован: 19.10.2016

Подобный пример уже на этом форуме обсуждался вроде.

Только не совсем понятно куда его нормальному бюргеру применять-то... Он и так в трех таймерах плутает.

Эта развлекуха для программистов на вечеринке - мол я и так вот могу... типа, наверное, как у опытных "Венечек" - смешивать и пить разные горючие вещества, которые другим и в голову не приходит так применять. Или как профессиональному жонглеру пускать в воздух комплект из десяти топоров...

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

мы его еще в марте обсуждали

http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/switch?page=1#comment-521716

и выше

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

мы его еще в марте обсуждали

http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/switch?page=1#comment-521716

и выше

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

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Мда. 

Voodoo Doll
Voodoo Doll аватар
Онлайн
Зарегистрирован: 18.09.2016

Green
Offline
Зарегистрирован: 01.10.2015

Буквально вчера написал человеку программулину аж с ДВУМЯ goto. При этом вспоминал Дейкстру).

nik182
Онлайн
Зарегистрирован: 04.05.2015

В switch goto стыдливо прячут за break. Ну и кто тогда эти борцы за отсутсвие goto? Тем более что запрета на goto нет. Есть условия, где его не следует применять. Люди не почитавшие всю информацию, а услвшывшие часть и бъющиеся за запрет goto выглядят по крайней мере забавно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nik182 пишет:
В switch goto стыдливо прячут за break.
И за case тоже.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017
Как ни странно, goto официально применяется в ядре
Linux, там это даже настоятельно рекомендовано
Смотреть седьмую часть документа или просто поиском.
 
И ить не боятся люди призрака Дейкстры с дубиной....
 
wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

DetSimen пишет:

Как ни странно, goto официально применяется в ядре
Linux, там это даже настоятельно рекомендовано
Смотреть седьмую часть документа или просто поиском.
 
И ить не боятся люди призрака Дейкстры с дубиной....
 

В ядре, как ты прочел, наиструктурнейшее применение goto! Исключительно для единообразия выходов и/или обработки исключений. ;))

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

wdrakula пишет:

В ядре, как ты прочел, наиструктурнейшее применение goto! Исключительно для единообразия выходов и/или обработки исключений. ;))

Так я ж его не боюсь, я из Фортрана вылез.  Именно так его и применяю. 

	void internalRead(void) override {
		uint8_t data[DEV_MEMORY_SIZE];
		int		error = 0;

		if (!WakeUpDevice(FDevAddress)) {
			error = err_i2c_DeviceNotFound;
			goto err_exit;
		}

		delay(5);

		Wire.beginTransmission(FDevAddress);
		Wire.write(CMD_READ);
		Wire.write(0x00);
		Wire.write(0x04);
		if (Wire.endTransmission() > 0) {
			error = err_i2c_ReadError;
			goto err_exit;
		}

		delay(2);


		Wire.requestFrom(FDevAddress, DEV_MEMORY_SIZE);
		if (Wire.readBytes(data, DEV_MEMORY_SIZE) != DEV_MEMORY_SIZE) {
			error = err_i2c_ReadError;
			goto err_exit;
		}

		
		if (!CheckCRC(data,DEV_MEMORY_SIZE-2)) {
			error = err_i2c_CRCError;
			goto err_exit;
		}

		Check(data);

		return;

	err_exit:
		if (error == err_i2c_CRCError) {
			PostMessage(msg_Error, error);
		}
		else {
			Error(error);
		}
	}

 

b707
Offline
Зарегистрирован: 26.05.2017

у меня такое впечатление, что все тут собрались убедить самих себя, что использовать goto - не стыдно :)

Иначе всю эту тусовку сторонников goto, продолжающих высказывать аргументы, хотя с ними никто не спорит - я трактовать не могу :)))

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Я - за. ¦-)   Мне не стыдно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wdrakula пишет:
наиструктурнейшее применение goto!
«Это не лягушка! Истинный Христос, не лягушка ... не простая лягушка, а вустрица ... может она, эта хреновина, вустричной породы?» (М.А. Шолохов, «Поднятая целина»)