Отладочные строки
Добавлено:
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 21:51:18
DedFrend
Если кто-то обиделся, приношу свои извинения. Я тоже "больше так не буду". Но интересно все-таки почему такой старый и простой прием не применяется нигде. Или где-то есть ?
Re: Отладочные строки
Добавлено:
07.08.2023 02:48:52
Sharfik
ИМХО, не удобно очень. Читать кол замечаешься с такими буквами. Вариант
- Код: Выделить всё
{$IFDEF WINDOWS} Windows, {$ENDIF}
гораздо приличнее.
ПС: У патента есть строк жизни, он уже должен был истечь. Плюс кто будет изучать Фортран сейчас? Им PAscal то лень изучить, всем модный Питон подавай
.. фу пакость.. "пошел рот мыть".
Re: Отладочные строки
Добавлено:
07.08.2023 04:17:01
Vapaamies
DedFrend писал(а):Но интересно все-таки почему такой старый и простой прием не применяется нигде. Или где-то есть ?
Смотрел много языков, тоже нигде не видел. Утащил в концепции
себе — как развитие идеи поколений кода (в данный момент для просмотра этой ветки нужна регистрация на форуме — раздел закрыт на ревизию).