2015-02-07 23:11
⁄ 工业·编程
⁄ 共 3977字
其实,“编译”这个词大多数时候,我们指的是由一堆.h,.c,.cpp文件生成链接库或者可执行文件的过程。但是拿C/C++来说,其实这是很模糊的,由一堆C/C++文件生成应用程序包括预处理---编译文件---链接(写的比较粗糙,不影响本文论述)。
首先,要明白什么是编译单元,一个编译单元可以认为是一个.c或者.cpp文件,每一个编译单元首先会经过预处理得到一个临时的编译单元,这里称为tmp.cpp,预处理会把.c或者.cpp直接或者间接包含的其...
c++, 编译器阅读全文
2014-12-20 16:06
⁄ 工业·编程
⁄ 共 1027字
1. 能不用全局变量尽量不用,我想除了系统状态和控制参数、通信处理和一些需要效率的模块,其他的基本可以靠合理的软件分层和编程技巧来解决。
2. 如果不可避免需要用到,那能藏多深就藏多深。
1)如果只有某.c文件用,就static到该文件中,顺便把结构体定义也收进来;
2)如果只有一个函数用,那就static到函数里面去;
3)如果非要开放出去让人读取,那就用函数return出去,这样就是只读属性了;
4)如果非要遭人蹂躏赋值,好吧,...
c++, 变量阅读全文
2014-12-14 06:12
⁄ 工业·编程
⁄ 共 3118字
近几年C++有了很多变化。最新的两个版本C++11和C++14,引入了如此多的新特性,用 Bjarne Stroustrup的话说就是“感觉就像一个新语言一样。”
真的。现代c++形成了一个全新的编程风格,我不能不注意到它带有更多的Python味道。基于范围(Range)的循环、类型推导、向量、map初始化和lambda表达式。你越是探索现代C++,你越能够发现它里面的Python痕迹。
是Python直接影响了现代C++吗?还是在C++传开前,Python已经采用了一些有用的...
c++, Python阅读全文
2014-11-14 07:20
⁄ 工业·编程
⁄ 共 7757字
1、类型定义typedef
类型说明的格式为:
typedef 类型 定义名;
类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型。定义名表示这个类型的新名字。
例如: 用下面语句定义整型数的新名字:
typedef int my_int;
使用说明后, my_int就成为int的同义词了, 此时可以用my_int 定义整型变量。
例如: my_int i, j;(与int i, j等效)。
但 long my_int j,k等 是非法的。
typedef同样可用来说明结构、联合以及枚...
c++阅读全文
2014-11-13 07:14
⁄ 工业·编程
⁄ 共 2923字
在泛型编程的形参表中,关键字typename和class具有相同的含义,可以相互使用,两个关键字都可以在同一模板形参表中使用:
1. typename用在模板定义里,标明其后的模板参数是类型参数。
template<typename T,class U> calc (const T&, const U& );
// 定义一个返回参数中较大者的通用函数
template <typename T>
const T& max(const T&...
c++阅读全文
2014-11-12 12:11
⁄ 工业·编程
⁄ 共 1367字
如果您从未使用过sprintf (我第一次开始写Windows程式时也没用过此函式),这里有一个简短的执行实体。
printf函式说明如下:
int printf (const char * szFormat, ...);
第一个参数是一个格式字串,後面是与格式字串中的代码相对应的不同类型多个参数。
sprintf函式定义如下:
int sprintf (char * szBuffer, const char * szFormat, ...);
第一个参数是字元缓冲区;後面是一个格式字串。sprintf不是将格式化结果标准输出,而...
c++阅读全文
2014-11-11 09:08
⁄ 工业·编程
⁄ 共 5973字
问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?
template<class T> class Widget; // uses "class"
template<typename T> class Widget; // uses "typename"
答案:没什么不同。在声明一个 template type parameter(模板类型参数)的时候,class 和 typename 意味着完全相同的东西。一些程序员更喜欢在所有的时间都用 class,因为它更容易输入。其他人...
c++阅读全文
2014-11-07 07:12
⁄ 工业·编程
⁄ 共 10130字
std::set/std::map (以下用 std::map 代表) 是常用的关联式容器,也是 ADT(抽象数据类型)。也就是说,其接口(不是 OO 意义下的 interface)不仅规定了操作的功能,还规定了操作的复杂度(代价/cost)。例如 set::insert(iterator first, iterator last) 在通常情况下是 O(N log N),N 是区间的长度;但是如果 [first, last) 已经排好序(在 key_compare 意义下),那么复杂度将会是 O(N)。
尽管 C++ 标准没有强求 std::map...
c++阅读全文
2014-11-05 12:15
⁄ 工业·编程
⁄ 共 7426字
今年8月,经过投票, C++14标准获得一致通过。目前唯一剩下的工作是ISO进行C++标准的正式发布。在本文中,我关注的是新标准中的几个重要点,展示了即将到来的改变会如何影响你的编程方式,特别是在使用被现代C++称之为习语和范型的特性时。
C++标准委员会决心使标准制定过程比过去10年更加快速。这意味着,距上一个标准(即C++11)仅3年的C++14是一次相对较小的发布。这远非一个令人失望的消息,恰恰相反,这对程序员来说是个好...
c++, C++14阅读全文
2014-10-31 06:52
⁄ 工业·编程
⁄ 共 11123字
本文主要讨论 Linux x86 平台,会继续举 Windows/COM 作为反面教材。
本文是上一篇《C++ 工程实践(4):二进制兼容性》的延续,在写这篇文章的时候,我原本以外大家都对“以虚函数作为接口”的害处达成共识,我就写得比较简略,看来情况不是这样,我还得展开谈一谈。
“接口”有广义和狭义之分,本文用中文“接口”表示广义的接口,即一个库的代码界面;用英文 interface 表示狭义的接口,即只包含 virtual function 的 class,这种 cl...
c++阅读全文