windows平台窗口程序。typedef为一个类型起新名字。windows开发把C语言类型进行了重定义

windows平台窗口程序。typedef:为一个类型起新名字。windows开发把C语言类型进行了重定义

什么是API(Application Programming Interface)

a)第一方接口:C语言函数库,C++类库(STL) Standard Template Library,

b)第二方接口:是操作系统提供的函数库:比如windows下是CreateThread、linux下是pthread_create

c)第三方接口:某个公司的接口,比如mysql是Oracle公司提供的mysql.h里面的函数。

opencv是IBM研发的图形开发库,包括识别,生成框图,计算面积等等。

点云(PCL)库包括三维形状的计算等等

为什么windows重新定义了大量类型?

有历史原因,早期windows是在16位操作系统下,int类型是16位2个字节。

windows95进入windows32位,int变成了32位4个字节。

#ifdef _WIN32

typedef int INT;

#else

typedef short INT;

#endif

如果宏 _WIN32 已经定义(通常在 Windows 环境下会定义该宏),则将 INT 定义为 int 类型。

如果宏 _WIN32 未定义(例如在非 Windows 环境下),则将 INT 定义为 short 类型。

非常量的引用必须为左值 这句话如何理解?


#include <Windows.h>
#include <iostream>
using namespace std;
void Test(const int& n)
{
	int nContents = 0x0000000f & n;
	int nBehavior = 0x000000f0 & n;//4到8位保留,其他位置为0
	switch (nContents)
	{
	case 0x01:
		cout << "捕获成功" << endl;
	}
}

int CALLBACK WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow
)
{

	int n =  MessageBox(
		//_In_opt_标志物,输入型参数
		NULL,
		"hello windows",//LPCSTR    LPSTR
		"温馨提示:",
		MB_OKCANCEL | MB_ICONWARNING
	);
	Test(MB_OKCANCEL | MB_ICONWARNING);
	return 0;
}


名为 HWND 的结构体指针类型别名。在 Windows 下,句柄(Handle)是用于标识和引用系统资源的一种特殊数据类型。它通常是一个整数值或一个指针,用于表示不同类型的对象,如窗口、图标、菜单、光标

宏定义是一种在C语言中用来定义宏的预处理指令。宏是一种在代码中进行文本替换的机制,可以通过宏来定义常量、函数或代码片段的缩写形式。#表示这是一条预处理命令,所有的预处理命令都以 # 开头。

HWND hWnd = FindWindow(NULL, "API汇总.txt - Notepad");//捕捉当前活跃窗口。HWND 是一个抽象的句柄类型,具体的句柄值和内部结构由操作系统维护和管理,开发者无需关心其具体实现细节,只需使用句柄来引用和操作窗口即可。
	int n =  MessageBox(
		//_In_opt_标志物,输入型参数
		hWnd,
		"hello windows",//LPCSTR    LPSTR
		"温馨提示:",
		MB_OKCANCEL | MB_ICONWARNING
	);

//DECLARE_HANDLE(HWND) 是一个宏调用,将 HWND 作为参数传递给了宏 
DECLARE_HANDLE            (HWND);
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
//struct name##__{int unused;};:宏展开后的第一行代码,生成一个以 name 为名称的结构体类型,其中包含一个未使用的整型成员。name##__ 是使用预处理器连接运算符 ## 连接 name 参数的值和 __,以形成唯一的结构体名称。
struct HWND__ {int unused;}; typedef struct HWND__ *HWND;

  • # 运算符用于在预处理期将宏参数转换为字符串

  • # 的转换作用是在预处理期完成的(编译器不知道),因此只在宏定义中有效

// 25-1.c
#include<stdio.h>
#define STRING(x) #x
int main()
{
    printf("%s\n", STRING(hello world!));
    printf("%s\n", STRING(100));
    printf("%s\n", STRING(while));
    printf("%s\n", STRING(return));
    return 0;
}

  	#define CALL(f, p)(printf("Call function %s\n", #f), f(p))
	result = CALL(square, 4);
   
    result = (printf("Call function %s\n", "square"), square(4))//定义的宏是个逗号表达式,返回值等于最后一个表达式的值,利用 # 操作符将函数名转换为字符串,再调用这个函数,计算结果。
// 25-3.c
#include<stdio.h>
#define NAME(n) name##n
int main()
{
    int NAME(1);
    int NAME(2);
    NAME(1) = 1;
    NAME(2) = 2;
    printf("%d\n", NAME(1));
    printf("%d\n", NAME(2));
    return 0;
}
# 1 "25-3.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "25-3.c"
int main()
{
    int name1;
    int name2;
    name1 = 1;
    name2 = 2;
    printf("%d\n", name1);
    printf("%d\n", name2);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值