#macros #fortran #c-preprocessor
#макросы #fortran #c-препроцессор
Вопрос:
Я хочу привести свои данные в соответствие с тем, !DIR$ ATTRIBUTES ALIGN:NBYTE::X
где NBYTE
определено во время компиляции. В настоящее время я нахожусь в верхней части каждого исходного файла, имеющего
#ifndef NBYTE
#define NBYTE 64
#endif
Однако я не знаю, смогу ли я определить это только после того, как буду использовать NBYTE
переменную везде.
Итак, мои два вопроса:
-
Возможно ли определить макрос только один раз и использовать его везде, не включая файл или макрос в каждый исходный файл?
-
Могу ли я определить переменную в Makefile и использовать ее в своем коде на Fortran?
Комментарии:
1. Какой компилятор вы используете?
2. Компилятор Fortran Intel
Ответ №1:
Большинство компиляторов позволяют предварительно обработать исходный код с помощью препроцессора C-типа. Одновременно они позволяют передавать макросы препроцессора через командную строку компилятора. В gfortran
вы можете использовать следующий синтаксис:
-Dname=definition
: Содержимое определения маркируется и обрабатывается так, как если бы оно появилось во время третьей фазы перевода в#define
директиве. В частности, определение будет усечено встроенными символами новой строки.
Комментарии:
1. Итак, если я скажу -DNBYTE = 64 и добавлю этот флаг во время компиляции кода, так и будет
2. @A2LBK Для
ifort
это тот же синтаксис3. @A2LBK да, но вам нужно убедиться, что ваш код предварительно обработан.
4. Да, я делаю это с флагом -fpp. Большое спасибо!