预处理:也就是包含需要的头文件,用#include<标准头文件>或#include "自定义的头文件"
宏定义,如:#define PI 3.1415926
查看用宏定义的值替换宏名称,如:gcc -E test.c
带参数的宏:MAX(x,y) (x)>(y)?((x):(y)) //使用方法与函数一样
宏运算:
#define PRINT(n) printf(#n"=%d",n) //#n 就是把传入的变量值作为字符串放在那里
预处理:也就是包含需要的头文件,用#include<标准头文件>或#include "自定义的头文件"
宏定义,如:#define PI 3.1415926
查看用宏定义的值替换宏名称,如:gcc -E test.c
带参数的宏:MAX(x,y) (x)>(y)?((x):(y)) //使用方法与函数一样
宏运算:
#define PRINT(n) printf(#n"=%d",n) //#n 就是把传入的变量值作为字符串放在那里
c/c++语法,运算符:
sizeof() --参数为变量或类型,计算变量或类型的字节大小
a==b?c:d --三目运算符,a==b时,返回c,否则返回d
算术运算符:+,-,*,/,%
自加、自减运算:++,--
位运算:
~ --取反,正数取反为 -(n+1) ,负数取反为 n-1
文档类
1 相关类
CDocument类-父类是CCmdTarget类,所以,文档类也可以处理菜单等
命令消息。作用保存和管理数据。
注意事项:如何解决断言错误
运行时类信息
程序在运行时,获取对象类的信息及类的继承关系
实现:
1、定义类继承自CObject类。
2、类内声明宏DECLARE_DYNAMIC(),类外实现宏IMPLEMENT_DYNAMIC()
3、使用:
BOOL IsKindOf(CRuntimeClass* pClass)//对象是否属于某个类
MFC工具栏
相关类:
CToolBarCtrl - 父类是 CWnd 封装了工具栏控件相关操作
CToolBar - 父类是CControlBar 封装了工具栏和框架窗口之间的关系
工具栏使用:
//把工具栏对象定义为 CMyFrameWnd成员:
CToolBar toolbar;
linux 基本命令的使用-命令在ubuntu下面执行,有些命令通用其他linux,有些不通用。
多条命令间用;号隔开,回车后可以一起执行。
clear-前屏,pwd显示当前目录,cd跳转目录。
sudo [命令] -ubuntu 下以管理员身份运行命令。
一般情况下,运行当前目录下的程序,要用 ./文件名 执行。
查看当前shell名称:ps
进入另外一个shell,直接输入shell名称:ksh/tcsh/sh/bash,退出一个shell用:exit。
切换shell命令,如:exec bash
要在第二行输入,按:ctrl+c
机制3:MFC消息映射机制:
类内声明,类外定义宏,绑定消息处理函数
派生自CCmdTarget
类内声明宏:DECLARE_MESSAGE_MAP()
类外添加实现宏:
BEGIN_MESSAGE_MAP(类名,父类名)
END_MESSAGE_MAP()
//数据结构
struct AFX_MSGMAP_ENTRY
一、MFC概念和作用
1、全称Microsoft Foundation Class Library,我们称为微软基础类库,封闭了绝大部分的win32 Api函数,C++语法中的数据结构,程序的执行流程
MFC就是一个库(动态库,静态库)
MFC还是一个程序框架
2、为什么使用MFC
基于框架编程,提高工作效率,减少开发周期,节约开发成本。
线程同步技术:
原子锁
临界区(段)
互斥
事件
信号量(线程示例时已经使用过)
可等候定时器
使用范围:原子锁<临界区<互斥
效率: 原子锁>临界区(用户态)>互斥(内核态)
一般用临界区。
Windows进程
进程是一个容器,包含程序执行需要的代码、数据、资源等信息,
windows进程的特点:
每个进程都有自己的ID号
每个进程都有自己的地址空间,进程之间无法访问对方的地址空间。
每个进程都有自己的安全属性
每个进程至少包含一个线程。
获取和释放环境信息
GetEnvironmentStrings