C++ 编译器的行为就像预处理器指令是';t定义
我有一个头文件和它的cpp文件(Error.h,Error.cpp)。cpp文件对预处理器指令执行检查,但总是失败 错误。h:C++ 编译器的行为就像预处理器指令是';t定义,c++,C++,我有一个头文件和它的cpp文件(Error.h,Error.cpp)。cpp文件对预处理器指令执行检查,但总是失败 错误。h: /* Optional macros: AE_EXIT_AT_ERROR AE_CONSOLE_WRITE_AT_ERROR */ #pragma once extern void aeError(const char *str, int code=1); extern void aeAssert(bool b, const char *failStr = "ass
/*
Optional macros:
AE_EXIT_AT_ERROR
AE_CONSOLE_WRITE_AT_ERROR
*/
#pragma once
extern void aeError(const char *str, int code=1);
extern void aeAssert(bool b, const char *failStr = "assertion failed");
Error.cpp:
#include "Error.h"
#include <stdexcept>
#ifdef AE_CONSOLE_WRITE_AT_ERROR
#include <iostream>
#endif
void aeError(const char *str, int code)
{
#ifdef AE_CONSOLE_WRITE_AT_ERROR
std::cout << str << std::endl;
#endif
throw std::runtime_error(str);
#ifdef AE_EXIT_AT_ERROR
std::exit(code);
#endif
}
void aeAssert(bool b, const char *failStr)
{
if(!b)
aeError(failStr);
}
std::coutmain.cpp
和Error.cpp
都是不同的翻译单位。只能为main.cpp
定义宏,而不能为Error.cpp
定义宏
您应该将#define
指令放在两个.cpp文件包含的头文件中,或者在项目设置/makefile中定义这些宏。抛出后的退出将永远不会执行。为什么?它应该在运行时错误之后执行。(我想我可以在弹出的消息窗口中选择“继续”)在throw
语句之后,函数退出。其他任何行为都是非标准行为。
//define both macros:
#define AE_CONSOLE_WRITE_AT_ERROR
#define AE_EXIT_AT_ERROR
#include "Error.h"
//rest of code
//...