使用#include将从终端读取的文件包含到函数中

时间:2017-01-24 10:18:45

标签: c++ command-line

我编写了一个代码,该代码从文本文件中读取数学函数,这些函数采用C ++兼容格式并对其应用数学运算。这是代码的简短摘要。我知道#include是一个预处理器指令,所以一旦读入文件的内容,每次都会通过bash脚本编译代码。

double myfunc(long double x){
   return
   #include "/.../filename"
}

int main{
   "Maths stuff happens here"
}

这可以按预期工作,但我希望能够加快进程并从终端读取文件名,而不是每次都将其输入脚本。为此,我尝试使用以下内容:

int g_argc;
char **g_argv;

void process_command_()
{
   filename=argv[1]
}

double myfunc(long double x){
   return
   #include filename
}

int main{
   "Maths stuff happens here"
}

认为这样做有点牵强,但我不确定如何从终端读取文件名到我的函数中,好像我自己输入了它,因为函数在int main()之外。我查看了StackExchange并发现了类似的问题,但没有一个解决方案适用于我的情况。

非常感谢任何帮助。

为了清晰起见,

编辑此代码是一个数值集成代码,它将一个非常大的被积函数作为文本文件的输入,并使用CUBA库完成集成。我将这个过程从Maple转移到了C ++中,以提高速度和准确性。该脚本运行得非常好,可以复制已知值〜比Maple / Mathematica可以做的快400倍。

2 个答案:

答案 0 :(得分:1)

也许对你来说最简单的方法就是这样。

<?php
include("connection.php");
$uid=$_REQUEST['userid'];
$activityname="Change status";
$recentstatus=mysqli_query($cn,"SELECT DISTINCT userstatus,activityid,userid FROM useractivity WHERE userid='$uid' AND activityname='$activityname' ORDER BY activityid DESC ");
while($raw=mysqli_fetch_assoc($recentstatus))
{
    $emparray[] = $raw;      
}
$x['data'][]=$emparray;
$x['status']='OK';
echo json_encode($emparray);  
?>

然后当您在double myfunc(long double x){ return #include MY_FILENAME } 中编译时,将其传递给另一个参数:

process_command()

这是您需要构建"-DMY_FILENAME=/path/to/your/file" 或任何存储文件名的字符串。

如果调用调用编译器的bash脚本,则需要将文件名作为参数传递给脚本,并安排脚本将其与argv[1]一起传递给编译器本身。

答案 1 :(得分:0)

WhiZTiM的评论/链接让我意识到这是一个非常愚蠢的问题,所以为浪费你的时间而道歉。我想要的可以在bash脚本中完成。我只是在main.cpp

中定义一个占位符
double myfunc(long double x){
   return
   #include <filename>
}

接下来,我将一个简单的bash脚本放在一起,以main.cpp运行文件复制到输入.txt文件的目录并使用sed&#39; s查找并替换命令,它会在filename中切换main.cpp以获取从终端获取的实际文件:

input_file=( "$PWD/${@}" )
cp ${HOME}/.../main.cpp $PWD
sed -i "s|filename|${input_file}|g" main.cpp

然后在脚本末尾编译并运行命令。

感谢您对此问题的所有帮助。我无法相信我没有看到解决方案如此简单。