ruby中如何直接编译运行C代码

    我们知道ruby通过C EXT可以很方便的运行C代码,其实只要是C接口的语言都可以,比如汇编语言也可以哦。但是一些简单的函数难道还得费劲用C扩展的方式吗?其实ruby gem里有RubyInline包,通过它可以在ruby源代码里写C代码,然后调用执行啊!

    直接用 gem install RubyInline 安装吧!我们测试一下:

require 'inline'

class A
  inline do |b|
    b.include '<stdio.h>'
    b.flags=["-std=c99"]
    b.c "
    int show(int i,int j)
    {
      return i+j;
    }"

    b.c "int main(void)
    {
    	puts(\"hello world!\");
    	return 0;
    }"

    b.c 'void fast_inc(long x)
    {
    	long long v = 0;
    	for(long i=0;i<x;++i)
    		for(long j=0;j<x;++j)
    			for(long k=0;k<x;++k)
    				v += i+j*k;
    				//printf("now is %ld , %ld , %ld\n",i,j,k);
    	printf("v is %lld\n",v);
    }'
  end
end

a = A.new
puts a.show(1,2)
a.main()
a.fast_inc(90000000000000)

可以看到ruby中很方便的调用C中的函数,因为后面用了C99的语法,所以要在flags中设置C99选项.注意flags是以数组而不是字符串来赋值的!

时间: 2024-10-31 06:40:09

ruby中如何直接编译运行C代码的相关文章

MAC 系统如何使用 Sublime Text 2 直接编译运行 java 代码_java

修改 /Users/$username/Library/Application Support/Sublime Text 2/Packages/Java/JavaC.sublime-build 为: 复制代码 代码如下: {  "cmd": ["java", "$file_base_name"],  "file_regex": "^ *\\[javac\\] (.+):([0-9]+):() (.*)$",

深入理解Ruby中的代码块block特性_ruby专题

block是什么? 在Ruby中,block并不罕见.官方对block的定义是"一段被包裹着的代码".当然,我觉得这样的解释不会让你变的更明白. 对block的一种更简单的描述是"一个block就是一段存储在一个变量中的代码,它和其他的对象一样,可以被随时的运行" 然后,咱们通过看一些代码,之后再把这些代码重构成Ruby中的block形式.通过代码来实际的感受,更加直观. 比如,对两个数做加法? puts 5 + 6 # => 11 嗯,这样写是可以的.但是,

关于 string iterators imcompatiable问题 能编译 运行出错 求大大指点

问题描述 关于 string iterators imcompatiable问题 能编译 运行出错 求大大指点 #include #include #include #include #include using namespace std; struct com{ bool operator()(const string &s1, const string &s2){ int c1 = count(s1.begin(), s2.end(), '1'); int c2 = count(s2

vscode 运行环境-求大神告知:如何在 visual studio code中编译运行C/C++代码?

问题描述 求大神告知:如何在 visual studio code中编译运行C/C++代码? 求大神告知:如何在 visual studio code中编译运行C/C++代码,如需配置环境,怎么配置?求详细操作,拜谢! 解决方案 http://stackoverflow.com/questions/30269449/how-do-i-set-up-vscode-to-compile-c-code google下就有答案 解决方案二: 如何在visual studio2015 中配置编写C.C++

gcc vc++6.0-同样代码VC6.0结果正确,GCC编译运行结果不正确,原因是什么呢?谢谢!

问题描述 同样代码VC6.0结果正确,GCC编译运行结果不正确,原因是什么呢?谢谢! #include int main() { char deno[1000]={''},num,i=0,remain=0; scanf("%s %d",deno,&num); //获取被除数.除数 if(!num) return (-1); while(deno[i]!='') deno[i++]-='0'; //转换成数字 deno[i]='#'; //结束标志 i=0; while(deno

x264代码剖析(二):如何编译运行x264以及x264代码基本框架

x264代码剖析(二):如何编译运行x264以及x264代码基本框架           x264工程在x265出现之前一直在更新,但是自x264-20091007(含)不再支持VC++平台,也就是说支持VC++平台的x264的最新版本是x264-20091006.接下来就以该版本为例简单介绍如何编译运行x264以及x264代码的基本框架.           首先下载x264-20091006,地址为:http://ftp.videolan.org/pub/videolan/x264/snap

Ruby中的block代码块学习教程_ruby专题

1.什么是代码块在Ruby中,{}或do...end之间的代码是一个代码块.代码块只能出现在一个方法的后边,它紧接在方法最后一个参数的同一行上,由yield关键字调用.例如: [1,2,3,4,5].each { |i| puts i } [1,2,3,4,5].each do |i| puts i end 块变量:以yield关键字调用block也可以传递参数,block中竖线(|)之间给出的参数名用于接收来自yield的参数.  竖线之间(如上例中的 | i |)的变量被称作块变量,作用和一

如何在网页中加入运行脚本代码的功能

如何在网页中加入运行脚本代码的功能  以下是HTML网页特效代码,点击运行按钮可查看效果: [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

Sublime中编译运行java和scala

1. 运行Java参考http://www.oschina.net/translate/compile-and-run-java-programs-in-sublime-text-2 a. 设置环境变量 b. 在jdk的bin目录或者其他path中新建编译运行脚本 windows下runJava.bat: @ECHO OFF cd %~dp1 ECHO Compiling %~nx1....... IF EXIST %~n1.class ( DEL %~n1.class ) javac %~nx