Я пытаюсь подражать утверждениям C в Фортране, чтобы обеспечить соблюдение предварительных и последующих условий всех моих процедур. Таким образом, я могу предоставить пользователю более подробную информацию о ошибках во время выполнения, чем можно было бы разумно ожидать в противном случае.Можно ли предположить, что препроцессор Fortran будет работать на большинстве систем?
В целях реализации этого я использовал директивы препроцессора __FILE__
и __LINE__
и образующий assert
макро, который расширяется до Fortran вызова подпрограммы. Вместо того, чтобы пытаться описать его здесь, я сделал git repo с небольшим количеством примеров кода. Если вы построите его с помощью
make test
./test
функция зависает, потому что вы вызвали функцию, которая ожидает положительный аргумент с отрицательным. Однако, если вы строите с
make test DEBUG=1
./test
ошибка поймана утверждением.
Это работает как с gfortran, так и с компилятором Intel Fortran. У меня нет доступа к другим компиляторам Fortran. Могу ли я разумно ожидать, что другие компиляторы сделают необходимую предварительную обработку исходного кода, если расширение файла .F90
? Или я должен полагаться на флаг -cpp
? Какой самый портативный способ сделать это? Должен ли я вообще это делать?
Я бы добавил, что вы можете использовать препроцессор CPP напрямую, если он не интегрирован в какой-либо компилятор Fortran. Он включен во все компиляторы C, которые доступны в каждой системе. –
Вы должны быть немного осторожны, используя любой препроцессор C, поскольку у них есть привычка убирать то, что они считают комментариями. Поскольку '//' является допустимым комментарием C или C++, который может иметь неожиданные результаты для любого кода Fortran с конкатенацией символов или конкретных общих или форматированных операторов. – IanH