Страница 1 из 1

Отладочные строки

СообщениеДобавлено: 04.08.2023 22:00:52
DedFrend
Когда-то давно, когда я еще писал на Фортране, у компилятора была интересная фича. В Фортране, если первым символом в строке является С, то вся строка считается комментарием (примерно как //, но только в начале строки). Это в стандарте языка. А в компиляторе, про который я пишу, можно было в первой строке ставить букву D и тогда, в зависимости от параметров компиляции, такие строки или считались комментариями или компилировались как обычно. Для отладки было очень удобно.
И с тех пор я ни в одном компиляторе, включая и С, я не встречал подобного. Про условную компиляцию я знаю, но на мой вкус, она сильно засоряет текст программы, да и сложнее в использовании. Я подозреваю, что просто способ запатентован и бабок требуют огромных. А жаль. Есть мнения?

Re: Отладочные строки

СообщениеДобавлено: 05.08.2023 17:10:52
xchgeaxeax
DedFrend писал(а):Про условную компиляцию я знаю, но на мой вкус, она сильно засоряет текст программы, да и сложнее в использовании. Я подозреваю, что просто способ запатентован и бабок требуют огромных.

Код: Выделить всё
#include <iostream>

#define __DEBUG__
#ifdef __DEBUG__
#   define D(x) x
#else
#   define D(x)
#endif

int main(int argc, char* argv[]) {
    D(std::cout << "Debug message\n";)
    std::cout << "Hello world!" << std::endl;
    return 0;
}
Что ещё проще нужно? Правда это на С++. Хотелось бы подобного в FPC.
Можно даже так
Код: Выделить всё
#include <iostream>

#define __DEBUG__
#ifdef __DEBUG__
#   define D(x) x
#else
#   define D(x)
#endif

D(void DebugPrint(std::string str) {)
D(    std::cout << "DEBUG: " << str << "\n";)
D(})

int main(int argc, char* argv[]) {
    D(DebugPrint("Debug message");)
    std::cout << "Hello world!" << std::endl;
    return 0;
}

Re: Отладочные строки

СообщениеДобавлено: 06.08.2023 10:33:06
iskander
DedFrend писал(а):Когда-то давно, когда я еще писал на Фортране, у компилятора была интересная фича. В Фортране, если первым символом в строке является С, то вся строка считается комментарием (примерно как //, но только в начале строки). Это в стандарте языка. А в компиляторе, про который я пишу, можно было в первой строке ставить букву D и тогда, в зависимости от параметров компиляции, такие строки или считались комментариями или компилировались как обычно. Для отладки было очень удобно.
И с тех пор я ни в одном компиляторе, включая и С, я не встречал подобного. Про условную компиляцию я знаю, но на мой вкус, она сильно засоряет текст программы, да и сложнее в использовании. Я подозреваю, что просто способ запатентован и бабок требуют огромных. А жаль. Есть мнения?

Емнип, первые шесть позиций каждой строки фортрановской программы имели специальный смысл, соответственно такую фишку было несложно реализовать.
Может макрос сойдёт в качестве суррогата?
Код: Выделить всё
program test;
{$macro on}
{$ifdef DEBUG}
  {$define DebugLine:=}
{$else}
  {$define DebugLine:=//}
{$endif}
begin
  DebugLine WriteLn('Debug only line');
  WriteLn('Ordinary line');
end.

Re: Отладочные строки

СообщениеДобавлено: 06.08.2023 11:56:16
DedFrend
Я не спрашивал "как еще можно?" . Я спрашивал "вы такой способ встречали?" .
Меня этот способ подкупает своей тривиальностью. Чего не скажешь про условную компиляцию и, тем более, про макросы, которых в Паскале вообще не предусмотрено.

Re: Отладочные строки

СообщениеДобавлено: 06.08.2023 15:39:06
iskander
DedFrend писал(а):Я не спрашивал "как еще можно?"

Ой.

Re: Отладочные строки

СообщениеДобавлено: 06.08.2023 21:51:18
DedFrend
Если кто-то обиделся, приношу свои извинения. Я тоже "больше так не буду". Но интересно все-таки почему такой старый и простой прием не применяется нигде. Или где-то есть ?

Re: Отладочные строки

СообщениеДобавлено: 07.08.2023 02:48:52
Sharfik
ИМХО, не удобно очень. Читать кол замечаешься с такими буквами. Вариант
Код: Выделить всё
  {$IFDEF WINDOWS} Windows, {$ENDIF}

гораздо приличнее.

ПС: У патента есть строк жизни, он уже должен был истечь. Плюс кто будет изучать Фортран сейчас? Им PAscal то лень изучить, всем модный Питон подавай :mrgreen: :mrgreen: .. фу пакость.. "пошел рот мыть".

Re: Отладочные строки

СообщениеДобавлено: 07.08.2023 04:17:01
Vapaamies
DedFrend писал(а):Но интересно все-таки почему такой старый и простой прием не применяется нигде. Или где-то есть ?

Смотрел много языков, тоже нигде не видел. Утащил в концепции себе — как развитие идеи поколений кода (в данный момент для просмотра этой ветки нужна регистрация на форуме — раздел закрыт на ревизию).