将C ++代码编译为.EXE,返回double

时间:2017-06-13 10:09:01

标签: c++ matlab return double main

我正在使用MATLAB优化平台来实现黑盒成本函数(BBCF)。

为了让用户自由行动,使用的BBCF可以是输入BBF输入参数的任何可执行文件,并且必须输出(返回)BBCF的成本值,以便MATLAB BBCF优化器找到最佳(成本最低) )输入参数。

考虑到,一方面,我的BBCF是用C ++实现的,另一方面是成本值是双(实数),我需要将我的代码编译成一个输出(返回)double的EXE文件

但是,据我所知,当我将一个C ++代码编译为EXE时,它“主要”编译main()函数,其输出是main()函数的输出(即如果运行成功则为0!)

一个想法可能是使用一个返回double的main函数,然后将main()编译为EXE,但不幸的是,它在C ++中是不可能的(如the documentation中所解释的那样或回答this link是C ++的一个错误,这两个问题都不是这个问题的原因。)

任何人都可以通过EXE编译形式的C ++代码,输出(返回)一个double值吗?

2 个答案:

答案 0 :(得分:1)

这不是C ++中的一个错误' (顺便说一下,bug可能在某些C ++编译器中,而不是在语言本身中) - 标准中描述的main()应该返回一个整数:

http://en.cppreference.com/w/cpp/language/main_function

关于如何从可执行文件返回非int,有几种方法可以做到这一点。我想到了两个最简单的(就如何实现它们而言)解决方案:

  1. 将其保存到文件中。然后在Matlab中监视该文件以进行更改(例如比较时间戳)或在每次执行EXE文件后读取,具体取决于您将如何使用它。不是非常有效的解决方案,但是工作和可能的性能损失可以忽略不计其他计算。
  2. 如果您的成本值丢失了一些数字精度就可以了,您可以将double值乘以某个数字(此数字越大,您将保留的小数位数越多)。然后将其舍入,将其转换为int,将其从main()返回,将其转换为matlab中的double并除以相同的数字。用作乘数的数字应该是2的幂,因此它不会引入额外的舍入误差。如果您的成本值采用限制在[0,1]范围内的值,或者您可以将其标准化为这些值并且您知道小于某个阈值的变化并不重要,则此方法可能特别有用。

答案 1 :(得分:0)

在英语中,'shall'比'must'更强大。

进行这样的更改需要更改操作系统和shell。这种变化不大可能发生。

传递双返回的最简单方法是将其写入标准输出。或者,有几种方法可用于进程间通信。