有没有办法用visual studio禁用cpp文件中的单个警告线?
例如,如果我捕获异常并且不处理它,则会收到错误4101(未引用的局部变量).有没有办法在该函数中忽略它,否则在编译单元中报告它?此刻,我放在#pragma warning (disable : 4101)
文件的顶部,但显然只是将它关闭整个单元.
我只是想知道,如果我想将a除以b,并且对结果c和余数感兴趣(例如说我有秒数并希望将其分成几分钟和几秒),那么最好的方法是什么去吧?
可不可能是
int c = (int)a / b;
int d = a % b;
Run Code Online (Sandbox Code Playgroud)
要么
int c = (int)a / b;
int d = a - b * c;
Run Code Online (Sandbox Code Playgroud)
要么
double tmp = a / b;
int c = (int)tmp;
int d = (int)(0.5+(tmp-c)*b);
Run Code Online (Sandbox Code Playgroud)
要么
也许有一个神奇的功能同时给出一个?
如利润,方向等......
dev.off()
不适合我.我经常使用RStudio,内置图形设备.然后我有绘图功能,我想要在默认的RStudio图形设备中绘制,或者如果我X11()
在新窗口中调用之前绘制.
此行为不起作用dev.off()
.如果我的绘图功能总是调用dev.off()
,它可能会无意中关闭X11()
窗口,而是在RStudio设备中绘图.如果我总是打电话dev.off()
跟随X11()
,它将始终在新窗口中绘图,即使我想在RStudio设备中绘图.
getOption("device")
然而,通常可以通过总是返回来解决RStudioGD
.
所以我听说有关boost log的好消息.这声称它的存在:
http://boost-log.sourceforge.net/libs/log/doc/html/index.html
这是教程:
http://boost-log.sourceforge.net/libs/log/doc/html/log/tutorial.html#log.tutorial.trivial
但是,提升日志不是提升的一部分.因此不在常规的boost分支中.
可以从这里单独下载升压日志:
http://sourceforge.net/projects/boost-log/
我可能只是缺乏经验,但我发现安装说明很差.尽管如此,在将文件夹boost和lib下载并复制到boost文件夹后,我可以运行bootstrap和bjam.这失败了Boost.Filesystem版本的错误,类似于这里提到的那些:
http://boost.2283326.n4.nabble.com/Boost-Log-compilation-on-msvc-2010-fail-td3488502.html
Andrew Semashev的推荐(在上面的链接中)是"请使用Boost.Log v2(来自SVN主干)."
看看https://boost-log.svn.sourceforge.net/svnroot/boost-log,我只能看到版本1.
看看http://svn.boost.org/svn/boost/sandbox/,我可以找到John Torjo的boost logging v2.但是,仅从安德鲁·塞马舍夫所谈论的可能不是提升日志v2的语法.
看到我已经花了太多时间在这上面,我想我会得到一些帮助,也许其他人可能会从这篇文章和答案中获益并节省一些时间.我认为之前没有得到过回答,这些答案会改变我的想法.
所以,请问:Andrew Semashev谈论的是什么是boost log v2?和John Torjo一样吗?如果没有,我可以在哪里找到它?我该如何构建它?
谢谢
PS我应该提到这是在Windows上使用Visual Studio Express 2010
PPS猜测"版本2",显然只是SVN,也有问题,但有这条线(见下面Sergio的答案)
<toolset>msvc:<define>BOOST_FILESYSTEM_VERSION=2
在bjam文件中至少我可以编译.但是,这个文件
#include <boost/log/trivial.hpp>
int main(int, char*[])
{
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
BOOST_LOG_TRIVIAL(info) << "An informational severity message";
BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
BOOST_LOG_TRIVIAL(error) << "An error severity message";
BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
}
Run Code Online (Sandbox Code Playgroud)
直接从教程中,虽然现在编译和链接,不产生任何输出...
如何构建boost
的iostreams
库gzip
和bzip2
支持?
我想知道链接器级别或编译器级别的内联函数在执行速度方面是否有任何区别?
例如,如果我在.cpp文件中拥有所有函数并依赖链接器进行内联,那么这种内联可能效率低于在编译器级别上为选定内联定义某些函数或在没有任何链接的情况下统一构建的所有函数内联编译完成?
如果链接器同样有效,为什么还要在编译器级别上明确地内联函数呢?这只是为了方便,说只有一行构造函数,因此不能用.cpp文件打扰?
我想这可能取决于编译器,在这种情况下,我最感兴趣的是Visual C++(Windows)和gcc(Linux).
谢谢
我想知道如何在x轴上绘制时间时绘制更多刻度线.
基本上,相当于漂亮的时间.很明显,随着时间的推移不能很好地运作,因为它使用1,2,5和10的因子.对于时间,人们可能想要例如小时,半小时......
plot(as.POSIXct(x,origin="1960-01-01"),y,type="l",xlab="Time")
Run Code Online (Sandbox Code Playgroud)
给出了太少且间隔很大的标记.
zoox<-zoo(y,as.POSIXct(stats$Time,origin="1960-01-01"))
plot(zoox)
Run Code Online (Sandbox Code Playgroud)
给出了相同的.
谢谢
编辑:
只是为了澄清(到目前为止答案没有解决我的问题):我正在寻找的是一个像日期一样的函数,例如一个函数,它取一个开始日期,一个结束日期,一些滴答,并输出蜱虫的位置.也就是说,我很清楚可以绘制小时数,绘制分钟数以及其他内容,但是相当于自动化数字的刻度距离,日期的结果函数应该自行决定是否使用天,小时,分钟,秒,毫秒,微秒,30分钟,500微秒,5秒等间隔.无论如何,这就是数字的优点.
EDIT2:
这是我目前用来决定时间轴格式的函数(请注意,这不适用于日期):
mydiff <- end-start
if(mydiff>1800) {
axis.POSIXct(1,xrange,format="%H:%M")
} else if(mydiff>30) {
axis.POSIXct(1,xrange,format="%H:%M:%S")
} else if(mydiff>0.5) {
axis.POSIXct(1,xrange,format="%H:%M:%OS3")
} else
axis.POSIXct(1,xrange,format="%H:%M:%OS6")
}
Run Code Online (Sandbox Code Playgroud)
我没有增加刻度线的功能,因此我使用默认的刻度线数
我想知道代码中有未使用的函数的开销是多少.
比如说你有一些调试日志记录,然后你给大多数对象一个在调试日志中使用的ToString()函数.
在发布版本中,未使用调试日志记录.是否值得删除那些ToString()函数的源代码?(例如通过宏?)
或者他们只是使可执行文件略大,否则不会影响性能?例如没有速度影响?或者,如果不使用它们,编译器或链接器是否甚至可能删除它们?如果编译器或链接器没有删除代码,那么如果ToString()函数是内联定义的呢?据推测,它会尝试内联代码,因为函数永远不会被调用,它会消失吗?
我想每个函数都需要保留在静态库中,但是一旦编译成可执行文件,链接器肯定会忽略很多东西吗?
另一个注意事项大致相似,如果编译器选择不内联内联函数,以便内联函数在几个编译单元中被定义为函数,那么链接器会丢掉多余的定义,并且最后只链接其中一个?
谢谢
嗨,我正在考虑使用快速可靠的生产者消费者队列进行线程切换.我正在使用VC++在Windows上工作.
我的设计基于Anthony Williams队列,也就是说,基本上是一个boost :: mutex,带有boost :: condition_variable.现在通常,notify_one()和唤醒之间的时间在10(罕见)和100微秒之间变化,大多数值在50微秒的范围内.但是,1000中大约有1个超过1毫秒,有些时间超过5毫秒.
我只是想知道这些是否是典型值?是否有更快的信号传递方式?是从这里到管理线程优先级吗?我还没有开始优先考虑,但我只是想知道是否有可能将它变成一个大约10微秒的相当稳定的区域?
谢谢
编辑:使用SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS),平均唤醒时间仍约为50微秒,但异常值较少,现在大多数都在150-200微米左右.除了7毫秒的怪异异常值.嗯...不好.