【发布时间】:2013-11-21 02:08:12
【问题描述】:
这个问题很简单,我能感觉到 RTFM 的到来。但是,我整个上午都在查看文档(Inline、Inline-C、Inline-C-Cookbook),我不知道如何解决这个问题。
我想使用内联 C,但我不想将 C 代码与我的 perl 代码放在同一个文件中。
(Emacs 不喜欢在一个文件中包含两种语言。原则上这是为了方便,但实际上我必须在一个文件中编辑我的 C,然后将其复制粘贴到我的 perl 脚本中。)
这里正在使用 perl:
#!/usr/bin/perl
use Inline C => DATA;
use strict;
use warnings;
use List::Util qw(sum);
use feature qw(say);
my @array = (1..10);
say "native perl: ", sum(@array), ", Inline C: ", sum1(\@array);
__END__
__C__
double sum1(AV* array) {
int i;
double sum = 0.0;
for (i=0; i<=av_len(array); i++) {
SV** elem = av_fetch(array, i, 0);
if (elem != NULL)
sum += SvNV(*elem);
}
return sum;
}
(感谢 mobrule 让我走到这一步。)
我想将所有 C 代码(或尽可能多的)移动到单独的头文件中。
我能做的就是将sum1 放入标题中,然后这样做:
# same perl as above except now say sum2 instead of sum1
__END__
__C__
#include "sum.h"
double sum2(AV* array) {
sum1(array);
}
这已经足够好了,因为我不再需要在 perl 模式下编辑 C,但我想知道是否有更优雅的解决方案来解决这个问题?
【问题讨论】:
-
@Pedro Silva 的旁观者之眼等等。对我来说似乎有点多余。