https://www.gravatar.com/avatar/8e10df0bad4c56b3464cd715f8d96c46?s=240&d=mp

Boost.Asio网络编程 第2章

Boost.Asio命名空间

Boost.Asio所有东西都放在boost::asio命名空间或者子命名空间:

  • boost::asio:核心类和函数放在这里。重要的类有io_service和streambuf。重要的自由函数,比如read,read_at,read_util,它们相应的异步版本,以及同步写和异步写函数。
  • boost::asio::ip:网络部分属于这里。重要的类有address,endpoint,tcp,udp,icmp。重要的自由函数connect和async_connect。注意boost::asio::ip::tcp::socket只是一个boost::asio::ip::tcp中的typedef。
  • boost::asio::error:包含调用I/O例程的错误码。
  • boost::asio::ssl:包含处理SSL的类。
  • boost::asio::local:包含POSIX相关的类。
  • boost::asio::windows:包含Windows相关的类。

IP地址

为了处理IP地址,Boost.Asio提供ip::address,ip::address_v4和ip::address_v6类。以下是一些最重要的函数:

Boost.Asio网络编程 第1章

什么是Boost.Asio

简单来说,Boost.Asio是一个跨平台的C++库,主要是为了网络编程和一些其它低级输入/输出编程。

Boost.Asio成功地抽象出输入和输出的概念,不仅仅是网络,还有COM串行端口,文件等。在此之上,你可以同步或异步进行输入或输出编程:

Python核心编程 第3章

3.1 语句和语法

关于Python语句的一些规则和符号:

  • 井号(#)指示Python注释。
  • 换行(\n)是标准行分隔符(一个语句一行)
  • 反斜杠(\)延续一行
  • 分号(;)将2个语句连接在一行
  • 冒号(:)分隔标题行和其单元
  • 单元通过缩进界定
  • Python文件组织成模块

3.1.1 注释(#)

Python注释以井号开始。一个注释可以在一行的任何地方开始,所有跟在井号后面直到行尾的字符被解释器忽略。明智审慎地使用它们。

Python核心编程 第2章

命令行选项

-d 提供调试输出 -O 生成优化字节码(产生.pyo文件) -S 启动时不要运行导入地址查询Python路径 -v 详细输出(详细追踪import语句) -m mod 将模块当脚本运行 -Q opt 除法选项 -c cmd 将cmd字符串当Python脚本执行 file 从指定文件运行Python脚本

21世纪C语言 第2章 调试,测试,文档

使用调试器

关于调试器的第一个简明提示:总是使用调试器。

一个调试侦探故事

调试代码:

#include <math.h>
#include <stdio.h> //size_t

typedef struct meanvar {double mean, var;} meanvar;

meanvar mean_and_var(const double *data){
    long double avg = 0,
          avg2 = 0;
    long double ratio;
    size_t count= 0;
    for(size_t i=0;  !isnan(data[i]); i++){
        ratio = count/(count+1);
        count ++;
        avg   *= ratio;
        avg2  *= ratio;
        avg   += data[i]/(count +0.0);
        avg2  += pow(data[i], 2)/(count +0.0);
    }
    return (meanvar){.mean = avg,
                    .var = avg2 - pow(avg, 2)}; //E[x^2] - E^2[x]
}

int main(){
    double d[] = { 34124.75, 34124.48,
                   34124.90, 34125.31,
                   34125.05, 34124.98, NAN};

    meanvar mv = mean_and_var(d);
    printf("mean: %.10g var: %.10g\n", mv.mean, mv.var*6/5.);

    double d2[] = { 4.75, 4.48,
                    4.90, 5.31,
                    5.05, 4.98, NAN};

    mv = mean_and_var(d2);
    mv.var *= 6./5;
    printf("mean: %.10g var: %.10g\n", mv.mean, mv.var);
}

使用CFLAGS="-g -Wall -std=gnu11 -O3" make stddev编译代码,gdb stddev_bugged调试代码。