如何实现直接执行源代码

执行函数YC_cppRun()

该函数可直接执行c/c++和Javascript源代码。

int YC_cppRun(
     const char *srcbuf,  //文件名或代码地址
     int srclen=0,        //0或代码长度
     int argc=0,          //传给源代码主函数main()的第一个形式参数
     void *argv=NULL      //传给源代码主函数main()的第二个形式参数
     );
参数:

srcbuf, srclen
    当srclen等于0时,srcbuf是c/c++源代码的文件名
    当srclen大于0时,srcbuf是源代码缓冲区,srclen是源代码长度。
argc, argv
    传给源码主函数main()的两个参数,其意义由源码自行定义。

返回值:

    如果函数运行成功,返回值为0,
    如果失败,返回非0值。

1. 用YC_cppRun()执行缓冲区源代码
#include <string.h>
#include "ycapi.h"
void main()
{
    char *sptr = "void main(int argc,char *argv)   \
                  {                                \
                     printf(`%d - %s`,argc,argv);  \
                  }";
    YC_cppRun(sptr, strlen(sptr), 2019, "断肠人在天涯\n");
}
      c/c++代码文件: fox.cpp

编译:用YC命令: ycc fox.cpp 或VC++命令: cl fox.cpp 生成fox.exe
运行:在cmd界面执行fox.exe后,输出下列文字:
              2019 - 断肠人在天涯

2. 用YC_cppRun()执行C/C++源码文件
void main(int argc,char *argv[])
{
    if(argc > 4)
      {
        *(double*)argv[4] = 3.1415926;
        argc--;
      }
    for(int ii=0; ii<argc; ii++)    printf("argv[%d] = %s\n",ii,argv[ii]);
}
               c/c++文件: big.cpp
#include <stdio.h>  //定义函数printf()的头文件.  用于VC等, YC编译器会自动包含
#include "ycapi.h"  //定义函数YC_cppRun()的头文件. 用于VC等, YC编译器会自动包含
void main()
{
    double pval;
    char *argv[] = {"五岭逶迤腾细浪","乌蒙磅礴走泥丸",   //设置形参之值
                    "金沙水拍云崖暖","大渡桥横铁索寒", (char*)&pval};
    int argc = sizeof(argv) / sizeof(argv[0]);           //设置形参个数
    YC_cppRun("big.cpp",0,argc,argv);   //用形参(argc,argv)执行c/c++文件big.cpp
    printf("pval = %.7f\n",pval);
}
              c/c++文件: sky.cpp

编译:用YC命令: ycc sky.cpp 或VC++命令: cl sky.cpp 生成 sky.exe
运行:在cmd界面执行sky.exe,将输出下列文字:
    argv[0] = 五岭逶迤腾细浪
    argv[1] = 乌蒙磅礴走泥丸
    argv[2] = 金沙水拍云崖暖
    argv[3] = 大渡桥横铁索寒
    pval = 3.1415926

3. 用YC_cppRun()执行Javascript源代码文件
var t1 = new Date();
var res = 0;
function fibonacci(i)
{
    if(I < 2) return i;
    res += 2.1;
    res += Math.tan(i)
    res += Math.cos(i);
    res += Math.sin(i);
    return fibonacci(i-2) + fibonacci(i-1);
}
document.write(fibonacci(32));  document.write("<br>\n")
document.write("res=" + res);  document.write("<br>\n")
document.write(new Date() - t1);  document.write("<br>\n")
           Javascript代码文件: rain.js
#include <stdio.h>
#include <ycapi.h>
void main()
{
   printf("begin running...\n\n");
   YC_cppRun("rain.js");    //执行Javascript文件
   printf("\nend.");
}
          c/c++代码文件: snow.cpp

编译:用YC命令: ycc snow.cpp 或VC++命令: cl snow.cpp 生成 snow.exe
运行:在cmd界面执行snow.exe后,输出下列文字:
begin running…

        2178309<br>
        res=-1255767.7334986837<br>
        809<br>

        end.

编译:用YC命令: ycc rain.js 生成 rain.exe,
运行:在cmd界面执行rain.exe后,输出下列文字:

        2178309<br>
        res=-1255767.7334986837<br>
        797<br>
4. 用YC_cppRun()执行exe文件
 YC_cppRun()函数也可以执行exe文件,如:
void WinMain()
{
       YC_cppRun(`"C:/Program Files/Internet Explorer/iexplore.exe" %1`
                 ` http://www.ycbro.com`);
}
            c/c++代码文件: wind.cpp

编译:用YC命令: ycc wind.cpp 生成 wind.exe,
运行:在cmd界面执行wind url后,将运行默认浏览器打开指定网页url。

运行状态
YC_cppRun(“file.exe”) 窗口状态
YC_cppRun(“file.exe”,-1) DOS状态

5. 使用YC_cppRun()函数的文件
  yced.cpp
        YC_cppRun("ycmb.cpp",0,1,bdata);
        YC_cppRun("ycmerge.cpp",0,0,&mbuild)
        YC_cppRun("ycvm.cpp",0,0,&mbuild);
        YC_cppRun("ycde.cpp",0,0,&mbuild);
  ycweb.cpp
        int errval = YC_cppRun("ycofn.cpp",0,0,&ofm);
  ycwin.cpp
        YC_cppRun("yctest.cpp");
  ycos.cpp
       YC_cppRun("bochs.exe -q -f ycos.src",-1);  //执行 bochs.exe 模拟器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值