C ++ - 有没有办法获得当前的执行行

时间:2011-02-25 08:41:58

标签: c++ visual-c++ macros logic

我需要创建一个异常处理,因为我还要求打印操作的状态,如

“文件打开:操作成功完成”

“文件关闭:操作成功完成”,

是否有像__LINE__,__FUNCTION__,__FILE__这样的宏?

或者有没有可用的增强功能?

3 个答案:

答案 0 :(得分:2)

C ++中都可以使用__LINE____FILE__,就像在C中一样。唯一需要注意的是它们是宏,在编译时扩展,所以如果你把它们放在宏或模板中,可能会也可能不会达到您的期望。

答案 1 :(得分:2)

我认为答案是你想要对你正在评估的表达式进行字符串化吗?

代码:

#include <stdexcept>
#include <sstream>
#include <iostream>

void check_result(bool result, const char* file, int line_number, const char* line_contents)
{
    if (!result) {
        //for example:
        std::stringstream ss;
        ss << "Failed: " << line_contents << " in " << file << ' ' << line_number;
        throw std::runtime_error(ss.str());
    }
}

#define CALL_AND_CHECK(expression) check_result((expression), __FILE__, __LINE__, #expression)

bool foobar(bool b) { return b; }

int main()
{
    try {
        CALL_AND_CHECK(foobar(true));
        CALL_AND_CHECK(foobar(false));
    } catch (const std::exception& e) {
        std::cout << e.what() << '\n';
    }
}

答案 2 :(得分:1)

我不确定你究竟在问什么,但这是我自己的库中的代码示例:

/**
 * \brief Convenient alias to create an exception.
 */
#define EXCEPTION(type,msg) type((msg), __FUNCTION__, __FILE__, __LINE__)

基本上,这允许我写:

throw EXCEPTION(InvalidParameterException, "The foo parameter is not valid");

当然,InvalidParameterException是我设计的一个类,它需要额外的参数来保存函数,文件和创建异常的行。

它有以下构造函数:

InvalidParameterException::InvalidParameterException(
  const std::string& message,
  const std::string& function,
  const std::string& file,
  int line);

当然,如果你不想抛出异常而只是输出一些东西,比如一个日志文件,你显然可以使用相同的“技巧”。

希望这有帮助。