#c #fortran #lowercase
#c #fortran #нижний регистр
Вопрос:
Я хотел бы сделать следующее:
В программе на FORTRAN
вызовите myPackageFunction(«MPI_User_function»)
… должен быть передан МАКРОСОМ ПРЕПРОЦЕССОРА C в…
вызовите myPackageFunction(«mpi_user_function_»)
Причина, по которой я хочу это сделать, заключается в том, что пользователю моего пакета (обычному пользователю MATLAB и Fortran) не обязательно знать об искажении имен Fortran, но в то же время выполнение этой задачи за пользователя не должно замедлять выполнение функции пакета.
Кто-нибудь знает, как я мог бы это сделать? Я был бы очень благодарен за любую помощь!
Комментарии:
1. Когда произойдет преобразование, будет ли пользовательский код FORTRAN запускаться через препроцессор C? Это не совсем понятно.
2. Да, пользовательский код на FORTRAN будет выполняться через препроцессор C. Пользователь должен включить «myPackage.h», чтобы вызвать функцию myPackageFunction. Итак, я мог бы определить макро там. Может быть, что-то вроде: #define myPackageFunction(строка) myPackageFunction(<Строка нижнего регистра>)
3. Похоже, вы пытаетесь передать подпрограммы C подпрограмме Fortran, это верно? Используя совместимость Fortran2003 с Fortran<-> C, вы можете избежать проблемы искажения всего имени, но было бы проще, если бы мы знали больше о том, чего вы пытаетесь достичь.
4. Спасибо за ваш комментарий. Да, я знаю о функциях взаимодействия. Однако для моего пакета разница между искажением имен на c и fortran в мою пользу, за исключением этой небольшой проблемы. => Я последую ответу Оли Чарльсворта и создам небольшой сценарий предварительного препроцессора.
Ответ №1:
Препроцессор C не может выполнить такого рода преобразование.
Вероятно, вам потребуется написать пользовательский скрипт, который делает это, который автоматически вызывается вашей системой сборки перед запуском компилятора.
Комментарии:
1. Большое вам спасибо за ваш ответ. Почему препроцессор C не может выполнить такого рода преобразование? потому что вообще нет способа получить доступ к отдельным символам строки?
2. @Sam: Препроцессор чрезвычайно ограничен в том, что он может делать. В принципе, он может выполнять только простые функции, подобные копированию и вставке.
3. Спасибо всем, кто прочитал мой пост => Я последую ответу Оли Чарльсворта и создам небольшой сценарий предварительного препроцессора.