一、NMAKE和Makefile
NMAKE - 命令解释器,根据Makefile文件中定义的脚本,完成项目的编译等操作
Makefile - 定义编译/链接等脚本语言
/
Makefile文件的编写
新建Makefile.mak文件记事本打开写入
window.exe:window.obj //依赖行,根据obj是否被修改过判断是否重新生成exe
cl.exe window.c /c //命令行,前面必须用tab键
link.exe window.obj user32.lib
dos中输入命令nmake /f Makefile.mak
此时生成window.obj 和 window.exe
根据时间戳确定是否需要重新编译链接。间隔~2s
//
利用宏定义替换
CPP=cl.exe
CPP_FLAG="/c"
LINK32=link.exe
LINK_LIB=user32.lib
ALL:CLEAN
@echo 正在组建
$(CPP) $(CPP_FLAG) window.c
$(LINK32) $(LINK_LIB) window.obj /out:window.exe
CLEAN:
@echo 正在删除
del window.exe
INSTALL:
执行过程
1.NMAKE首先找到第一个依赖行,根据依赖行之间的关系建立依赖树
例如 A:B
B:C
C:D
NMAKE会建立对应的依赖树
A
|-B
|-C
|-D
2.NMAKE执行D的命令行,依次执行父节点的命令行
3.在A的命令行执行结束后退出NMAKE
4.如果需要执行指定的依赖行需要在执行NMAKE时增加依赖行名称 如
NMAKE /f Makefile.mak B //<--指定从B执行
/
切换代码页实现字符输出SetConsoleCP函数 //头文件windows.h
BOOL SetConsoleCP(
UINT wCodePageID // code page
);
SetConsoleOutputCP函数 //修改控制台字符集函数
BOOL SetConsoleOutputCP(
UINT wCodePageID // code page
);
单字节字符和字符串 char cText='A'; char* pszText="ABCD";每个字符占一个字节
双字节字符 wchar_t cText='A'; wchar_t* pszText=L"ABCD"; 每个字符占两个字节
printf()打印不出字符串。因为假设A字符的双字节编码是0x0041,在内存中存放方式
是4100 printf在输出41后00被当做结束符,只能输出一个字符
宽字节字符的打印函数 wprintf(L"%s",ch);
C语言函数因为字符集的问题存在不同的版本
获取宽字节字符串长度的函数 wcslen(要求的字符串); //"ABCD"长度是4
TCHAR 为了程序中方便的支持Unicode和多字节字符等
所以使用TCHAR来定义字符和字符串
根据_UNICODE宏开关将TCHAR编译成不同字符类型
/
实现方法:
#ifndef _UNICODE
typedef char TCHAR
#define _T(x) x
#else
typedef wchar_t TCHAR
#define _T(x) L##x
#endif
使用时添加 TCHAR.H 头文件支持,使用_UNICODE宏开关进行编译
在TCHAR.H 头文件前添加 #define _UNICODE 支持多编译器
///
定义方式 : TCHAR * pszText = _T("ABCD");
代码使用 :使用UNICODE宏开关,通知编译器选择编译的代码
#ifndef _UNICODE
int nlen = strlen(pszText);
#else
int nlen = wcslen(pszText);
#endif
Unicode 的控制台打印
WriteConsole函数为windows的API
Unicode为世界上所有语言的字符集
win32 API的定义
每个API对于多字节字符和UNICODE分别有不同的版本
MessageBox
MessageBoxA 多字节字符
MessageBoxW UNICODE字符
打开UNICODE开关
在StdAfx.h头文件中#include<windows.h>前加上#define UNICODE
字符的定义使用TEXT宏
TCHAR *pszText =TEXT("ABCD");
win32 字符转换函数
MultiByteToWideChar
WideCharToMultiByte (win32 day02PM0350)