是否有c八度的前处理前指令和SCILAB的前处理器指令,用于抗衡代码



在c/c 语言中,一个人可以使用宏或称为"人均指令"来指示编译器应如何读取代码。#def#ifdef#ifndef#else#endif的简单命令...使编译器能够检查操作系统,编译器和其他环境信息。我知道八度和scilab是被解释的语言,但是我想知道是否有任何方法告诉解释器在加载脚本时替换脚本的部分?例如,我可以编写一个基于SCILAB语法//评论的代码,然后指示解释器将其读取为Octave的评论Sytax,为#%?这似乎是Scilab八度兼容性的主要问题之一。

如果有一种方法可以指示口译员检查解释器的信息Scilab/scicolab/octave/freemat,Julia ...和版本...然后基于该信息,则有一些#ifdef #endif块..然后,一个人可以编写与上述多个解释器兼容的代码。如果您可以让我知道是否有可能,以及是否可以编写与Octave和Scilab兼容的代码,我将不胜感激吗?

P.S.1 不同的方法是:

  1. 具有传统的if then elseif else end语句,包括具有独特结果的不同解释者的有效语法。如下答案所建议的。
  2. 从Scilab侧使用getsexecexecstr来加载.m文件。可以做一些正则以清洁代码。八度确实具有XML,例如#<include>...</include>
  3. 让量身定制的import功能这样的功能将MATLAB代码导入八度

P.S.2 八度具有version()功能,Scilab/Scicoslab具有getversion(),Julia具有versioninfoVERSIONFreeMat也具有version函数。也许也可以使用。

P.S.3 SCILAB已经有MATLAB/八度兼容性工具箱。而且还有Sci COSIM使用TCP端口将变量从Scilab工作区导入八度。

我想从不同的角度回答。也就是说,如果您觉得需要比较预处理前指令,那么您可能会考虑Scilab和八度。在C和C 中需要预处理器指令的原因是因为这些是编译的语言。预处理器指令在编译之前更改将要编译的实际代码。

用Matlab,Scilab和Octave等解释的语言,这种事情是多余的。因此,一个简单的"如果/else"块执行充分区分三个环境的测试应该足够的测试。

八度手册提出了一种区分八度音阶和MATLAB的方法,而MATLAB不会受到严重的惩罚。我没有安装SCILAB来提供同等测试,但我敢肯定,Scilab也存在简单的测试。

因此,在通过检测正确的环境来运行不同代码的上下文中,这是完全可能的。

在模仿#include策略的背景下,由于脚本是顺序运行的,因此您可以实现一个" if/else"块,该块只是在正确的时间运行了不同的基本脚本。

ps。Matlab一直在解释脚本的方式上进行了一些更改,因此,如果执行"嵌套"错误检查而不是表面错误检查,这可能会导致问题。但是,即使确实发生了这种情况,也可以简单地而不是直接调用脚本,您可以使用run filename语法,或者更糟糕的情况情况,使用eval调用脚本。

您可以定义功能isscilab

function [out] = isscilab()
        out = length(zeros(2)) == 1;
endfunction

并使用它有条件执行代码:

if isscilab()
    do scilab...
else
    do octave...
end

,但我认为最好的选择是您应该为八度和scilab .sce实施不同的文件并执行您想要的每个文件。

最新更新