simulink调用手写代码,使用matlab自带lcc-win64编译器误报“存在未闭合字符串”问题。
背景近期使用matlab2020b版本开发模型时在使用模型调用手写函数编译时出现报错报错原因为未闭合的字符串 / 字符常量文件末尾意外结束字符串引号没关。报错文件slcc_interface_xxx.cSimulink 自动生成的自定义代码接口文件。原因AirTemp编译时调用了手写的RTE.c生成代码时调用了手写的OutAirTemp.c函数此次报错原因是RTE.c中有未闭合的字符串 / 字符常量通过以下三种方式验证①核查RTE.C、RTE.h代码发现无空字符模型编译依旧报错。②新建空白文件RTE.c粘贴无任何注释、无空字符的极简代码发现依旧报错推断是matlab自带编译器识别错误问题LCC64 编译器对 UTF-8 BOM、换行符容错太低容易报Unterminated string or char const解析错误。③下载安装MinGW GCC编译器发现模型编译通过无报错。推断原因matlab自带LCC 编译器对中文、BOM、混合换行极度敏感可能存在将手写代码识别为空字符或无闭合引号优先用 MinGW编译器。MinGW GCC下载按照步骤下载 MinGW-w64 6.3.0 绿色压缩包。下载地址https://www.mathworks.com/matlabcentral/fileexchange/52848-matlab-support-for-mingw-w64-c-c-fortran-compiler解压放置推荐路径D:\mingw64不要放在桌面、带空格文件夹3.配置系统环境变量右键【此电脑】→【属性】→【高级系统设置】→【环境变量】新建用户变量变量名MW_MINGW64_LOC变量值D:\mingw64你的解压根目录不要加 \bin4.编辑系统变量Path新增一条D:\mingw64\bin部窗口点确定完全关闭 MATLAB 再重启重启后命令行执行mex -setup C重新运行mab编译关闭 MATLAB删除模型目录slprj缓存文件夹重新打开 AirTemp 模型Simulation Target 配置不变直接运行仿真