V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuboying
V2EX  ›  C

C 工程 转 C++ 问题

  •  
  •   xuboying · 2016-04-23 10:34:07 +08:00 · 2272 次点击
    这是一个创建于 3129 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我有一个包含 50+ .c 和 20+ .h 的 c 工程,需要转成 c++类以便在单个 exe 中产生多个实例

    是否有通用的指导方法

    我 google 了一下,想到下面几点

    1. 把.c 改为 .cpp 解决所有隐式转换的错误

    2. 删除 static 修饰,处理全局名字冲突

    3. 创建一个全局.h 文件,新建一个 FOO 类,把所有的全局函数,变量放入这个类

    4. 原先保存宏和常数的头文件以 extern "C"方式 include

    5. 所有的函数重命名为 FOO::函数
    7 条回复    2016-06-08 14:29:08 +08:00
    wezzard
        1
    wezzard  
       2016-04-23 10:51:59 +08:00   ❤️ 3
    extern "C",關鍵字 C++ name mangling
    xuboying
        2
    xuboying  
    OP
       2016-04-23 11:02:10 +08:00   ❤️ 1
    遇到一个 enum 的问题
    static const struct {
    const char* const mode;
    int opcode;
    enum { AAA, BBB } type;
    } ssh_ttymodes[] = {
    { "INTR", 1, AAA },
    { "QUIT", 2, AAA },
    { "ERASE", 3, AAA },
    { "KILL", 4, AAA },
    //...
    };

    AAA 这种白字在 C 里合法, C++不合法,但是这个 AAA 在哪个名字空间下呢?
    wangxn
        3
    wangxn  
       2016-04-23 13:12:14 +08:00
    不要用 C 的思维写 C++。
    老老实实定义一个类,而不是用 typedef 。
    soland
        4
    soland  
       2016-04-23 13:27:17 +08:00
    手动,重新写。
    xuboying
        5
    xuboying  
    OP
       2016-04-23 13:30:17 +08:00 via Android
    @soland 差不多,很多宏要用模板重写 :(
    xxgirl2
        6
    xxgirl2  
       2016-04-23 15:29:27 +08:00
    在单个 exe 中产生多个实例
    这个……包装成 handle 么……
    allenx
        7
    allenx  
       2016-06-08 14:29:08 +08:00
    估计是各种全局变量满天飞,老老实实改吧。 c 写的好多线程、多实例也是非常 easy ,代码写的丑而已。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   946 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:30 · PVG 05:30 · LAX 13:30 · JFK 16:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.