Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [General] Комментарии и еще чиво-то??


Автор: valvliv 14.2.2006, 21:39
Здрасте smile

Комментарии - это понятно, это восклицательные знаки. А тут в чужом коде еще напиханы всякие 'c' и 'crma' - это что?? Может, директивы прости господи распараллеливания какого-нибудь?? Мне вроде говорили, что код не распараллелен, откуда такое??

В гуглец сунулась - он мне выдал ссылок на фармацевтические статьи и что-то еще на японском и хинди.

Сижу офигеваю. Хелп.

И еще, если надо блок строк закомментировать, то как это??

Л.

Автор: Cr@$h 16.2.2006, 00:00
Древняя форма комментариев: самый первый символ строки -- "C", "c" или "*". Такая форма использовалась для кода в фиксированной форме записи (первые 6 символов типа служебные и прочяя дребедень). Т.к. она давно отменена и сейчас используется свободная форма, то такие комментарии оказались непригодными, т.к. с "C", например, может начинаться ключевое слово или еще что-то (тот же call). Все же кода на F77 и раньше с такой формой еще много и хорошего. Некоторые компиляторы признают такую форму только, если у файла расширение *.f или *.for. Если расширение *.f90, то файл интерпретируется в свободной форме записи и такие комментарии не компилируются -- их нужно будет заменять на "!".
Что такое crma не знаю. Возможно, если с него начинается строка, то тоже рассматривается как комментарий. Поэкспериментировал, похоже все, что начинается в первых шести символах для файлов с расширением *.f, выделяется зелененьким как комментарий. Так или иначе, для F90, F95, F2003 такой код не подойдет.
С блоком строк не догадались smile даже в F2003. smile
Цитата

3.3.1.1 Free form commentary
The character “!” initiates a comment except where it appears within a character context. The comment extends to the end of the line. If the first nonblank character on a line is an “!”, the line is a comment line. Lines containing only blanks or containing no characters are also comment lines. Comments may appear anywhere in a program unit and may precede the first statement of a program unit or may follow the last statement of a program unit. Comments have no effect on the interpretation of the program unit.
NOTE 3.6
The standard does not restrict the number of consecutive comment lines.

3.3.2.1 Fixed form commentary
The character “!” initiates a comment except where it appears within a character context or in character position 6. The comment extends to the end of the line. If the first nonblank character on a line is an “!” in any character position other than character position 6, the line is a comment line. Lines beginning with a “C” or “*” in character position 1 and lines containing only blanks are also comment lines. Comments may appear anywhere in a program unit and may precede the first statement of the program unit or may follow the last statement of a program unit. Comments have no effect on the interpretation of the program unit.
NOTE 3.8
The standard does not restrict the number of consecutive comment lines.


Возможно, появится потом как что-то типа !* *!. smile Меня тоже не радует.
Некоторые правила освещены и здесь на http://forum.vingrad.ru/index.php?showtopic=80959.

Автор: valvliv 16.2.2006, 01:07
Спасибочки smile

Автор: Cr@$h 16.2.2006, 18:52
Бывай. Успехов в твоих изысканиях. smile

Автор: Ignat 17.2.2006, 14:00
Цитата(Cr@$h @ 16.2.2006, 00:00 Найти цитируемый пост)
Древняя форма комментариев: самый первый символ строки -- "C", "c" или "*". Такая форма использовалась для кода в фиксированной форме записи (первые 6 символов типа служебные и прочяя дребедень).

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

Автор: Cr@$h 17.2.2006, 22:24
Цитата(Ignat @ 17.2.2006, 15:00 Найти цитируемый пост)
Меня эта форма записи жутко бесила...

Да, но она была определена использованием перфокарт, или еще чем-то другим позже. Точно так же твоих детей или внуков, быть может, будет бесить (да не то слово) ввод кода от руки на клаве, а не с голоса. Я понятные вещи говорю, да? В F03 фиксированная форма записи признана устаревшей и в следующий стандарт не войдет вовсе.
Цитата(Ignat @ 17.2.2006, 15:00 Найти цитируемый пост)
До сих пор для меня загадка - имена переменных в Ф77. С каких букв их надо называть, чтобы получить нужный мне тип?

Ну, с буквы "C" то точно можно. smile В самом деле, в Fortran имеются умолчания о типах данных:
  • имена, начинающиеся с i, j, k, l, m, n, имеют целый тип по умолчанию;
  • все другие объекты имеют тип real.
При разработке нового кода лучше писать в начале
Код

implicit none

и все умолчания отменяются. Впрочем, если указывать для каждой переменной тип, то такая строка не понадобится, но будет полезной для дополнительной проверки на наличие переменных без явного указания типа. Наверное, это не добавляет надежности, а скорее не преуменьшает её, т.к. в большинстве языков такие правила умолчания и так отсутствуют, не добавляя таких скользких моментов. Эту же функцию можно включать/выключать и с помощью директив компилятора или опций, что не рекомендую делать вообще. С помощью того же оператора можно указывать свои умолчания для любых букв. Фактически, Fortran позволяет использовать неявную типизацию, хорошо это или плохо. Её так же можно встретить и в некоторых современных интерпретируемых языках, например, Ruby, если я не ошибаюсь. Все же Fortran позволяет гулять на двух свадьбах, да еще и быть на них женихом. smile
Конечно, я не рекомендую использовать любые неявные средства языков при разработке программных систем.

Автор: Cr@$h 24.2.2006, 15:21
Цитата(valvliv @ 14.2.2006, 22:39 Найти цитируемый пост)
И еще, если надо блок строк закомментировать, то как это??

Я тут покапался в разных местах да поразмыслил.
  • В лоб -- через земену.
    Зменяем "перевод каретки" на "перевод каретки!". Не во всех редакторах это даже возможно.
  • Клавишы для IVFC.
    Выделяем блок, который требуется заменить. Ctrl+K+C -- комментирует весь блок, Ctrl+K+U -- расскоментирует весь блок. Про работу этой фичи в CFV не знаю.
  • Использование макроса.
    • Переходим на начало строки, например через Home.
    • Начинаем запись макроса Ctrl+Shift+R.
    • Начинаем производить действия макроса.
      • Вводим символ комментария "!".
      • Нажимаем влево -- переходим на начало строки.
      • Нажимаем вниз -- переходим на начало следующей строки
    • Завершаем запись макроса Ctrl+Shift+R.
    • Проигрываем этот макрос по Ctrl+Shift+P.
      Зажав эту комбинацию клавиш, строки будут комментироваться одна за другой. В CVF должно также работать.
  • Использование директив компилятора.
    Код

    !DEC$ IF( .FALSE. )
    ...
    ! Комментируемый блок
    ...
    !DEC$ END IF

    Недостаток понятен: отсутствие визуальной индикации, например выделение зелененьким цветом.
  • Написание макроса вручную.
    Схож со способом 3. Можно сопоставить клавишу Ctrl+1 со следующим макросом (на VBA):
    Код

    Sub PasteColumn()
        ActiveDocument.Selection.Paste
        ActiveDocument.Selection.CharLeft
        ActiveDocument.Selection.LineDown
    End Sub

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)