【发布时间】:2010-06-18 15:35:22
【问题描述】:
我开发了一个“自定义”cout,这样我就可以将文本显示到控制台并将其打印到日志文件中。这个 cout 类在初始化时传递了一个不同的整数,该整数表示消息的详细级别。如果当前详细级别大于或等于消息的详细级别,则应打印该消息。
问题是,即使当前的详细级别太低,我也会打印消息。我继续调试它,期望找到问题。相反,我发现我的 if 语句没有按预期工作的多种情况。
if(ilralevel_passed http://twitpic.com/1xtx4g/full。注意 ilralevel_set 如何等于 0,而 ilralevel_passed 等于 1。然而,if 语句已经返回 true,并且现在正在向前传递该行给 cout。
我以前从未见过这种行为,我不确定如何继续调试它。我也无法隔离这种行为——它只发生在我程序的某些部分。任何建议都将一如既往地受到赞赏。
// Here is an example use of the function:
// ilra_status << setfill('0') << setw(2) << dispatchtime.tm_sec << endl;
// ilra_warning << "Dispatch time (seconds): " << mktime(&dispatchtime) << endl;
// Here is the 'custom' cout function:
#ifndef ILRA_H_
#define ILRA_H_
// System libraries
#include <iostream>
#include <ostream>
#include <sstream>
#include <iomanip>
// Definitions
#define ilra_talk ilra(__FUNCTION__,0)
#define ilra_update ilra(__FUNCTION__,0)
#define ilra_error ilra(__FUNCTION__,1)
#define ilra_warning ilra(__FUNCTION__,2)
#define ilra_status ilra(__FUNCTION__,3)
// Statics
static int ilralevel_set = 0;
static int ilralevel_passed;
// Classes
class ilra
{
public:
// constructor / destructor
ilra(const std::string &funcName, int toset)
{
ilralevel_passed = toset;
}
~ilra(){};
// enable / disable irla functions
static void ilra_verbose_level(int toset){
ilralevel_set = toset;
}
// output
template <class T>
ilra &operator<<(const T &v)
{
if(ilralevel_passed <= ilralevel_set)
std::cout << v;
return *this;
}
ilra &operator<<(std::ostream&(*f)(std::ostream&))
{
if(ilralevel_passed <= ilralevel_set)
std::cout << *f;
return *this;
}
}; // end of the class
#endif /* ILRA_H_ */
【问题讨论】:
标签: c++ debugging if-statement