Andy Niu �����ĵ�

Andy Niu

Andy Niu Help  1.0.0.0
CPP

模块

 CPP工具
 
 CPP常用方法
 
 CPP常见错误
 
 CPP常见问题
 
 CPP文件操作
 
 CPP沉思录
 
 ModernCPP
 
 深度探索CPP对象模型
 

变量

 编码规范
 
 代码换行
 
 静态库与动态库相互调用
 

详细描述

变量说明

代码换行
1、字符串太长,换行显示,怎么办?
2、使用反斜杠,如下:
    string str = "abcd\
                 1234";
    注意:反斜杠后面不准有任何字符。下一行开头的制表符不包含在整个字符串中,但是下一行开头的空格符包含在整个字符串中。
3、使用双引号,如下:
    string str = "abcd"
        "1234";
    注意:两个字符串会自动拼接,两个字符串之间可以有任意多个空字符("")和空白字符(空白字符包括空格字符,制表符,换行符)。注意下面的区别:
    NULL:没有值
    空字符:"",不包含任何字符
    空白字符:有空格字符,制表符,换行符
参见
编码规范
1、不要使用using namespace std; 因为这会名称空间污染。
2、接口要暴露,就写在头文件,接口不暴露,就写在cpp文件,并且定义为 static内部链接。
参见
静态库与动态库相互调用
测试场景,Test,lib1,lib2,dll1,dll2,分为下面四种情况:
1、Test->lib1->lib2
    lib1编译自己的代码,对lib2的部分,只需要lib2的头文件,对lib2的代码实现,使用占位符关联。
    生成Test连接的时候,把lib1的代码实现包含进来,再递归,把lib1中关联lib2的代码实现也包含进来。
    运行Test的时候,不再需要lib1和lib2。
    也就是说,lib2不合并到lib1中,等到exe的时候,一起合并到exe中。
2、Test->lib1->dll2
    lib1编译自己的代码,对dll2的部分,只需要dll2的头文件,对dll2的代码实现,使用占位符关联。
    生成Test连接的时候,把lib1的代码实现包含进来,但是,dll2中的代码不包含进来。
    运行Test的时候,不需要lib1,但是需要dll2【不需要dll的lib文件】
    也就是说,dll2不合并到lib1中,等到exe的时候,把lib1合并到exe中。
3、Test->dll1->lib2
    dll1编译自己的代码,对lib2的部分,需要lib2的头文件和实现,即lib2,把lib2的代码实现包含到dll1中
    生成Test连接的时候,dll1中的代码不包含进来,也不再需要lib2。
    【可以这样测试,生成lib2,生成dll1,生成test,删除lib2,删除test.exe,再生成test,
    可以成功,说明生成test.exe,连接的时候,根本不需要lib2,
    也就是说,静态库会被连接到动态库或者exe中,但是不会连接到其他的lib中】
    运行Test的时候,需要dll1,但是不需要lib2
    也就是说,lib2合并到dll1中,等到exe的时候,不需要合并dll1,运行时需要dll1。
4、Test->dll1->dll2
    dll1编译自己的代码,对dll2的部分,需要dll2的头文件和lib文件,对dll2的代码实现,使用占位符关联。
    生成Test连接的时候,Test需要dll1的lib,dll1需要dll2的lib,但是代码实现都不会包含在Test中。
    运行Test的时候,需要dll1和dll2【不需要他们的lib】
    也就是说,dll2不合并到dll1中,等到exe的时候,二者都不需要合并,运行时需要二者。
参见
Copyright (c) 2015~2016, Andy Niu @All rights reserved. By Andy Niu Edit.