2015-02-17 5 views
-1

Я новичок в программировании. Мне нужно преобразовать файл Fortran 95 в файл C. В начале Fortran файла У меня есть модуль, который содержит кучу переменных, которые используются в различных функциях (не возражают комментарии):Мне нужна помощь в преобразовании формы кода Fortran в C

MODULE data 

IMPLICIT NONE 
SAVE 

DOUBLE PRECISION, PARAMETER :: tmax_dsmc = 450.D0  ! durata simulazione 
DOUBLE PRECISION, PARAMETER :: tim_dsmc = 150.D0  ! istante inizio campionamento 
DOUBLE PRECISION, PARAMETER :: dt_dsmc = 0.05D0  ! passo temporale 
DOUBLE PRECISION, PARAMETER :: alpha_dsmc = 0.02D0  ! gradiente velocita' 

Есть ли способ, чтобы повторить это в C? Я знаю, что могу использовать команду #define variable x, но я не знаю, правильно ли это; моя цель состоит в том, чтобы эти константы определялись где-то в коде, чтобы, если я изменяю один, каждая отдельная часть программы может узнать новое значение, которое я назначил. Конечно, я могу определить каждую константу в каждой функции, имеющейся в моем коде, но это было бы большой тратой времени.

+0

'# define' предназначен для констант, а не для переменных. Если вы измените их позже, сделайте что-то вроде '[type] x = [value]', где [type] - это любой тип, который вы хотите (int, float, double, char и т. Д.), А значение - это значение для его назначения , – Blob

+1

'ПАРАМЕТР' - константы ФОРТРАН? Итак, почему вы хотели бы изменить их в C? Вы действительно не хотите переводить или я ошибаюсь? –

+0

сожалею о моем словаре, но я не эксперт по программе; идея состоит в том, чтобы иметь некоторые параметры в начале кода, чтобы они просматривались всей программой; в случае, если я изменю одну из них, каждая функция и главное знать новое значение, которое я установил –

ответ

3

Если вы хотите определить константу в C, вы можете использовать #define PI 3.1415926. Если вы не хотите, чтобы дублировать это везде, то вы можете использовать #include сек, как это:

Первый заголовок (в файле с именем MyConsts.h):

/* My constants */ 
#define PI 3.1415926 

то модуль (в некоторых .c файле):

/* A module */ 
#include "MyConsts.h" // include here the contents of the file 
... 
double p = 2*PI*r; 
... 

и еще один (в другом .c файле):

/* Another module */ 
#include "MyConsts.h" // include here the contents of the file 
... 
double s = PI*r*r; 
... 

Если вы используете чистую процедуру компиляции, например, описывая зависимости в Makefile, то каждая модификация, сделанная в MyConsts.h, будет отражена в объектных модулях.

+0

Отличный !! он работал хорошо! Спасибо чувак! –

+0

У меня есть другой вопрос: что делать, если я хочу сделать то же самое, но используя float и ints в файле mycosntant.h? –

+0

Для коротких '123' это int literal,' 123.5'a double, '123.5f'a float и т. Д. Посмотрите на« C постоянные литералы »в Интернете. –

Смежные вопросы