您的位置:首页 > 编程语言 > C语言/C++

发现用混合C的C++很难写出完全正确的程序

2009-05-04 18:50 260 查看
#include <stdio.h>
#include <stdlib.h>
#include <stdexcept>

using namespace std;

struct A {
A() { printf("A::A()/n"); }
~A() { printf("A::~A()/n"); }
};

struct G {
G() { printf("G::G()/n"); }
~G() { printf("G::~G()/n"); }
};

G g;

int main(int argc, char* argv[])
{
if (argc < 2) return 1;
A a;
char szbuf[32]; // 这里不管分配多少,总有可能不够, gcc3.4 环境下 ret 可能大于 32, 内容被截断
int ret = snprintf(szbuf, sizeof(szbuf), "arg1=%s", argv[1]);
printf("ret=%d, szbuf=%s/n", ret, szbuf);
if (ret >= sizeof(szbuf)) {
perror("snprintf");
exit(1); // 如果是在深层函数调用,除了 exit(), 可用的就只剩下 throw
// 实际上 exit 有陷阱,exit 只析析构全局对象,
// C++ 规范说 exit 只析析构全局对象,不保证可以析构局部对象
}
char* psz;
// 发现一个法宝,可以 sprintf 动态申请的内存
// 但是也可能失败
ret = asprintf(&psz, "%.*s", 1000000000000, argv[1]);
if (ret < 0) {
perror("snprintf");
throw bad_alloc(); // 这里没有陷阱,但是如果没有外层 try-catch, 会 terminate
}
return 0;
}

难啊,想简单,好像只能用 sstream 了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: