Вы можете только предполагать, что код C89 / 90 компилируется в компиляторе Modelica.Хотя это в основном касается синтаксиса (если вы используете Include
аннотации или Library="file.c"
).
Доступные функции в основном зависят от библиотеки C, на которую ссылается ваш компилятор.Я предполагаю, что библиотека C Microsoft не содержит lgamma
, поэтому она не может быть связана с.В Linux / OpenModelica пример lgamma
работает, так как libm
содержит функцию (она компилируется с использованием режима c90, но неявно добавляет объявление double lgamma(double)
).
Пример powf
также компилируется,но он не работает правильно, так как ваша декларация external "C"
гласит, что она использует числа с плавающей запятой двойной точности (и вы не можете изменить это с Modelica 3.2).powf
будет читать половину a и использовать его в качестве первого аргумента, затем читать вторую половину a и использовать его в качестве второго аргумента.б будет отброшен.Если вы установите флаги компилятора на std=c99
, будет обнаружена ошибка:
powf.h: 23: 15: ошибка: конфликтующие типы для 'powf'
Обратите внимание, что если вы используете Dymola в Windows, вы, скорее всего, используете Visual Studio.В этом случае поддержка C99 отсутствует, кроме частей, скопированных из C ++.