Как (вычислить) goto и longjmp на C ++?

Обычно я не пишу на C ++, но мой странный друг-компьютерщик устал от просмотра моих замечательных программ FORTRAN и попросил меня переписать одну из них на C ++, так как ему больше нравятся мои коды C ++. (Здесь мы делаем ставку на деньги.) Точные условия заключаются в том, что его нужно компилировать в современном компиляторе C ++. Может, он ненавидит хороший conio.h - не знаю.

Теперь я понимаю, что есть совершенно хорошие способы написания на C ++, но я собираюсь добиться здесь личной победы, пытаясь сделать мою версию C ++ как можно более похожей на FORTRAN. Что касается бонусных баллов, это может сэкономить мне время и силы при преобразовании кода.

ТАК! Это подводит меня к следующим связанным запросам:

О goto:

  1. Как вы работаете с goto?
  2. Каковы ограничения на goto в C ++?
  3. Какие-либо опасения по поводу области видимости? (Я собираюсь попытаться охватить как можно больше глобальных масштабов, но никогда не угадаешь.)
  4. Если я использую расширение GCC для перехода к массиву указателей void, возникнут ли какие-либо новые проблемы с поведением undefined и т. Д.?


В longjmp:

  1. Как безопасно использовать longjmp?
  2. Что есть ли ограничения на longjmps в C ++?
  3. Что он делает с областью видимости?
  4. Есть ли какие-то особые моменты, когда кажется, что longjmp должен быть безопасным, но на самом деле это не то, чего мне следует остерегаться?
  5. Как мне смоделировать вычисляемый goto с помощью longjmp?
  6. Есть ли ощутимая польза от использования longjmp вместо goto, если в моей программе есть только одна функция?

Сейчас моя главная задача - заставить вычисленный goto работать для это. Похоже, я, вероятно, воспользуюсь longjmp для этой работы, потому что массив указателей void не является частью стандарта C ++, а является специфическим расширением GCC.

12
задан Code Maker 28 September 2011 в 22:33
поделиться