摘要:刚学C的时候,遇到如下问题:scanf("%d", n);scanf("%c", ch);本来我应该要按两次回车输入才结束吧。可是每次我输入一个整数,然后按回车准备输入一个字符的时候,输入就结束了。这个问题郁闷了好久。书上也没讲。后来找到了方法,在scanf("%d", n)之后调用fflush(stdin)来刷新输入缓冲。再后来,看到了更好的解决方法:scanf("%d%*c", &n);scanf("%c", &ch);后来遇到了另一个问题scanf("%s&quo
阅读全文
随笔分类 - C/C++
C、C++相关
摘要:头文件: 调试开关在头文件中#ifndef __DEBUG_ZWY_H__#define __DEBUG_ZWY_H__#include <stdio.h>#include <stdarg.h>#define _DBG_#define _DBG_LEVEL_INFO_//define _DBG_ to open debug#ifdef _DBG_ #ifdef _DBG_LEVEL_INFO_ /* 如果定义了调试级别为INFO, 那么同时打开WARN, ERR开关*/ #ifndef _DBG_LEVEL_WARN_ #define _DBG_...
阅读全文
摘要:当进程结束后所有线程都终止。多线程编程最大的问题在于共享数据的访问控制。直接用Win32 API进行编程有很多优点:基于Win32的应用程序执行代码小,运行效率高。但是它要求程序员编写的代码较多,且需要管理所有系统提供给程序的资源。▶创建线程HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize, // initial stack size LPTHREAD_START_ROUTINE lpStartAddress, // thread fu...
阅读全文
摘要:模板函数c++模板类/模板函数的声明与定义应该放在头文件里,不要分开来写类中函数的声明与定义(比如在.H文件里声明某个成员函数,在.CPP文件里定义该成员函数),这样会导致连接错误。所应该将模板类/模板函数的定义与声明写在一个.h文件里。STL 排序一个类型,如果要支持调用STL sort进行排序,那么应该实现operator<, 赋值操作。读取字符串(包括空格)fgets的输入包含有换行符gets的没有例如: 如果输入Hello+回车fgets: "Hello\n"gets: "Hello"指针减法指针减指针等于两个指针之间的元素的个数。例如:i
阅读全文
摘要:const对象并不是什么都不可改变的class A {public: int x, y;};class B {public: A *t; int *c, d;};void foo(const B& ob){ //ob.t++; //不合法 //ob.d++; //不合法 ob.t->x++; //合法 *(ob.c) = 3; //合法}在如上代码中const修饰的寓意相当于:A *t 转变成 A* const t;int *c 转变成 int* const c;int d 转变成 const int d;因此ob.t->x++是合法的*(ob.c) ...
阅读全文
摘要:#include <iostream>#include <vector>#include <iterator>#include <algorithm>struct Area { Area():x(0), y(0) {} Area(int a, int b):x(a),y(b){} int x,y; bool operator<(const Area &rhs) { return x<rhs.x; } //排序用到 friend ostream& operator<<(ostream &out, co
阅读全文
摘要:1 异常规格(exception specification)用来指定某个函数可能抛出哪些异常,例如:void fun() throw(bad_alloc); //fun()只能丢出bad_alloc异常void fun() throw(); //fun()不抛出任何异常void fun() throw()(E1, E2, E3); //fun()只能丢出E1, E2, E3异常2 命名空间定义命名空间namespace uvsjoh { int a; void fun() { cout<< "uvsjoh::fun" << endl; }};nam
阅读全文
摘要:/* 不用关系符和if比较大小 */#define MAX(a, b) (a/b)?a:b#define MIN(a, b) (a/b)?b:a/* 上面的方法,有个缺点,b不能为0 下面的方法可以解决这个问题*/#define MAX(a, b) (a+b+abs(a-b))/2#define MIN(a, b) (a+b-abs(a-b))/2/* 交换两个数的值 */#define SWAP(a, b) (a=a^b, b=a^b, a=a^b)如果需要加入一段在main退出后执行的代码,可以用atexit函数注册一个函数。函数原型为void ()(void)void fun(void)
阅读全文
摘要:1 符号术语“符号”(token)指的是程序的一个基本组成单元,其作用相当于一个句子中的单词。编译器中负责将程序分解为一个一个符号的部分,一般称为“词法分析器”。2 赋值符号一般而言,赋值运算相对于比较运算出现得更频繁,因此字符数较少的符号=就被赋予了更常用的含义------ 赋值操作。3 词法分析中的贪心法表达式 a---b 应该怎样理解呢?词法分析中的贪心法:每一个符号应该包含尽可能多的字符。“如果(编译器的)输入流截止至某个字符之前都已经被分解为一个个符号,那么下一个符号将包括从该字符之后可能组成一个符号的最长字符串。”明白这一规则,上面的表达式就不难理解了。相当于a -- - b4 八
阅读全文
摘要:从源文件生成可执行程序所经历的阶段: 预处理、编译、汇编、链接。1 预处理(preprocessing):预处理器执行源文件中的预处理命令、扩展源文件中的宏。 把包含所有的头文件扩展到源文件,替换源文件中的宏。预处理阶段影响GCC行为的常用选项如下:-E:保存预处理输出作为诊断用,打开该选项GCC只执行预处理。-o: 指定输出的中间文件名,默认输出到标准输出。-C:阻止预处理器移除源文件和头文件中的注释。-D name[= definition] 在预处理源文件之前定义符号name。该选项结合源文件中的预处理命令#ifdef name可以用于 条件编译。例如:-D DEBUG可以用来...
阅读全文

浙公网安备 33010602011771号