2014-02-08 2 views
1

Есть ли альтернатива для инструкции goto в программировании c.Альтернатива для goto в программировании c

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

Спасибо заранее.

+0

http://meta.stackexchange.com/questions/66377/what-is-the-xy- проблема –

+2

Есть 'setjmp()' и 'longjmp()', если вы чувствуете себя странно ... – Brendan

ответ

4

Разделите свои main на функции. Вместо того, чтобы прыгать в место внутри main, выполните соответствующую функцию. Это может потребовать передачи некоторых параметров в функции, но это, безусловно, того стоит.

+0

Но я планирую более 30-ти позиций с помощью операторов goto, поэтому я думаю, что goto может быть лучшим вариантом. Вместо того, чтобы создавать 30 функций для этого, я только попросил альтернативу для goto pls предложить мне спасибо за ваши предыдущие ans. – Jeyamaran

+3

@Jeyamaran Во-первых, 30 функций - разумное количество, в зависимости от реальных требований. Во-вторых, я почти уверен, что разница между этими 30 функциями в основном связана с обработанными данными - этот номер может с легкостью сокращаться, используя параметры, которые будут обобщать данные. – SomeWittyUsername

+0

спасибо, что это лучший вариант. @icepack – Jeyamaran

4

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

+0

Но я планирую более 30-ти позиций по заявлениям goto, поэтому я думаю, что goto может быть лучшим вариантом. Вместо того, чтобы создавать 30 функций для этого, я только попросил альтернативу для goto pls. – Jeyamaran

+2

@Jeyamaran goto никогда не лучший вариант и часто худший. – HAL9000

+0

Преодоление вашей программы в небольших функциональных единицах - хорошая практика. – haccks

0

Поместите «место, в которое вы хотите перейти» внутри функции и вызовите эту функцию каждый раз, когда вам нужно.

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

Так что вам нужно передать необходимые данные функции или использовать (не рекомендуется) из глобал

0

Для этого тренажера мне нужно идти особое место снова и снова внутри основными из какой-либо другой функции.

Это может быстро привести к коду спагетти. goto в функции для перехода вперед, например, в код очистки, это справедливое использование. Прыжки между функциями: не делайте этого, это ужасно (технически это можно сделать с некоторыми помощниками, которые я не буду называть здесь, чтобы у вас искушение).

Итак, что вы пытаетесь сделать, звучит так же, как так называемый сопрограммы для меня. И это можно сделать с помощью C, используя некоторую конструкцию под названием «Устройство Даффа». Там хорошая статья об этом здесь: http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html

И тогда есть библиотека C сопрограммная на Google Code: https://code.google.com/p/libconcurrency/

Смежные вопросы