gfortran компилятор undefined ссылка на MAIN__ [duplicate]

Как отмечал Берги, функции стрелок не имеют своей собственной переменной arguments.

Однако, если вы хотите захватить args для своей функции стрелки, вы можете просто использовать параметр останова

const myFunc = (...args) =>
  console.log ("arguments", args)
  
myFunc (1, 2, 3)
// arguments [1, 2, 3]

Параметры останова могут быть объединены с другими позиционными параметрами, но всегда должны быть включены как last

const myFunc = (a, b, c, ...rest) =>
  console.log (a, b, c, rest)

myFunc (1, 2, 3, 4, 5, 6, 7)
// 1 2 3 [ 4, 5, 6, 7 ]

Если вы допустили ошибку записи параметра отдыха в любой другой позиции, вы получите сообщение об ошибке

const myFunc = (...rest, a, b, c) =>
  console.log (a, b, c, rest)
  
myFunc (1, 2, 3, 4, 5, 6, 7)
// Error: Rest parameter must be last formal parameter

3
задан Alexander Vogt 11 June 2014 в 08:17
поделиться

1 ответ

Вы не упомянули, как вы компилируете свой код, но вот несколько общих способов включить несколько исходных файлов в один исполняемый файл. Вам не нужно включать файлы, вы можете просто скомпилировать их отдельно и связать их вместе. Написание Makefile для этого рекомендуется, и вы можете найти множество примеров в другом месте.

Чтобы скомпилировать несколько файлов в один исполняемый файл, вам нужно всего лишь перечислить их все при компиляции

gfortran -o output programA.f90 programB.f90 programC.90 mainprogram.f90

Если вы не хотите компилировать их все вместе или перекомпилировать при сборке, вы можете скомпилировать отдельные объекты, например

gfortran -c -o programA.o programA.f90
gfortran -c -o programB.o programB.f90
gfortran -c -o programC.o programC.f90

, а затем ссылку как

gfortran -o output mainprogram.f90 programA.o programB.o programC.o

Если вы вместо этого пытаетесь использовать библиотеки и хотите, чтобы программа AC была в автономной библиотеке, вы можете сначала скомпилировать объекты, как указано выше, затем

ar rcs libABC.a programA.o programB.o programC.o

, а затем скомпилировать свою основную программу как

gfortran -o output mainprogram.f90 libABC.a 

Если вы не используете модули, вы будете нести ответственность за то, чтобы ваши вызовы внешним подпрограммам соответствовали объявленному интерфейсу во внешнем файле. Чтобы быть в безопасности и проблемы с компилятором с несогласованными аргументами, вы можете объявить явные интерфейсы в своей программе или поместить внешний код в модули и use эти модули в основную программу.

5
ответ дан casey 24 August 2018 в 18:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: