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

Модератор: Модераторы

Ответить
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

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

Сообщение DedFrend »

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

Сообщение 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;
}
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение 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.
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Сообщение DedFrend »

Я не спрашивал "как еще можно?" . Я спрашивал "вы такой способ встречали?" .
Меня этот способ подкупает своей тривиальностью. Чего не скажешь про условную компиляцию и, тем более, про макросы, которых в Паскале вообще не предусмотрено.
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

DedFrend писал(а):Я не спрашивал "как еще можно?"
Ой.
Вложения
sorry.jpg
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Сообщение DedFrend »

Если кто-то обиделся, приношу свои извинения. Я тоже "больше так не буду". Но интересно все-таки почему такой старый и простой прием не применяется нигде. Или где-то есть ?
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 837
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

ИМХО, не удобно очень. Читать кол замечаешься с такими буквами. Вариант

Код: Выделить всё

  {$IFDEF WINDOWS} Windows, {$ENDIF}
гораздо приличнее.

ПС: У патента есть строк жизни, он уже должен был истечь. Плюс кто будет изучать Фортран сейчас? Им PAscal то лень изучить, всем модный Питон подавай :mrgreen: :mrgreen: .. фу пакость.. "пошел рот мыть".
Аватара пользователя
Vapaamies
постоялец
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vapaamies »

DedFrend писал(а):Но интересно все-таки почему такой старый и простой прием не применяется нигде. Или где-то есть ?
Смотрел много языков, тоже нигде не видел. Утащил в концепции себе — как развитие идеи поколений кода (в данный момент для просмотра этой ветки нужна регистрация на форуме — раздел закрыт на ревизию).
Ответить