集合循环简写
for (bool callRestore : { false, true })
{
}
变参函数
#include<stdarg.h>
void test_va(int type, ...)
{
va_list arg;
va_start(arg, type);
int iValue = 0;
char* szValue = 0;
if(type==1) iValue=va_arg(arg, int);
if(type==2) szValue=va_arg(arg, char*);
va_end(arg);
}
void test_va_format(const char* format, ...)
{
va_list arg;
va_start(arg, format);
char buffer[256] = "";
vsprintf(buffer, format, arg);
va_end(arg);
}
void test_van_format(const char *format, ...)
{
char buffer[256];
va_list args;
va_start (args, format);
vsnprintf (buffer, 256, format, args);
va_end (args);
std::cout << buffer << std::endl;
}
test_va(1,22);
test_va(2,"22");
test_va_format("%s-%d","wo",1);
test_van_format("float:%3.1f",1.2);
/*
va_list对应char*,方面字符串格式化;
va_start通过后面参数值的地址确定变参起始地址给前面参数,变参及前面参数可以看着连续存放的内存块
va_end将参数置空
*/
错误码和错误短语
enum ReturnStatus
{
STS_ERR_FAILED = -999,
STS_ERR_NOT_INITIALIZED = -998,
STS_ERR_NOT_ENOUGH_DATA = -996,
STS_ERR_NULL_PTR = -995,
STS_ERR_INIT = -899,
STS_ERR_END_OF_STREAM = -895,
STS_ERR_ALLOC = -883,
STS_ERR_UNSUPPORTED = -879,
STS_ERR_INVALID_PARAMS = -876,
STS_ERR_FILE_OPEN = -875,
STS_ERR_FORMAT = -874,
STS_OK = 0
};
typedef int Status;
struct CodeStringTable
{
int iCode;
const char *pString;
};
static const CodeStringTable StringOfBaseStatus[] = {
{ STS_OK, "Success" },
{ STS_ERR_FAILED, "General failure" },
{ STS_ERR_NOT_INITIALIZED, "Object is not initialized" },
{ STS_ERR_NOT_ENOUGH_DATA, "Not enough input data" },
{ STS_ERR_NULL_PTR, "Unexpected NULL pointer" },
{ STS_ERR_INIT, "Failed to initialize object" },
{ STS_ERR_END_OF_STREAM, "End of stream" },
{ STS_ERR_ALLOC, "Failed to allocate memory" },
{ STS_ERR_UNSUPPORTED, "Unsupported parameters/mode" },
{ STS_ERR_INVALID_PARAMS, "Invalid parameters" },
{ STS_ERR_FILE_OPEN, "Failed to open file" },
{ STS_ERR_FORMAT, "Invalid format" },
};