zoukankan      html  css  js  c++  java
  • #define和typedef在windows上的应用

    typedef的应用

    typedef是在计算机编程语言中用来为复杂的声明定义简单的别名。
    下面的代码定义了一些常见类型的别名

    typedef int                 INT;
    typedef unsigned int        UINT;
    typedef unsigned int        *PUINT;
    

    windows通常定义结构体的同时会定义结构体的别名,下面的代码定义了tagPAINTSTRUCT结构体,同时给了定义PAINTSTRUCT别名以及指针类型的别名PPAINTSTRUCT等。

    typedef struct tagPAINTSTRUCT {
        HDC         hdc;
        BOOL        fErase;
        RECT        rcPaint;
        BOOL        fRestore;
        BOOL        fIncUpdate;
        BYTE        rgbReserved[32];
    } PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT;
    

    #define的应用

    1. 简单的define定义

    #define MAX_PATH          260
    

    2. define定义函数

     #define max(a,b)            (((a) > (b)) ? (a) : (b))
    

    3. #和##操作符

     ##用于连接字符,windows的应用之一就是TEXT定义。
    TEXT("Hello")等价于__TEXT("Hello"),__TEXT("Hello")等价于L"Hello"。

    #define TEXT(quote) __TEXT(quote)
    #define __TEXT(quote) L##quote
    

      #用于给字符加双引号,MKSTR(HELLO C++)等价于"HELLO C++"

    #define MKSTR( x ) #x
    

    4.多行定义

    "afxmsg.h"下ON_WM_PAINT()宏定义如下。

     #define  ON_WM_PAINT()  
        { WM_PAINT,  0 ,  0 ,  0 , AfxSig_vv, 
        (AFX_PMSG)(AFX_PMSGW) 
        (static_cast <   void  (AFX_MSG_CALL CWnd:: * )( void )  >  (  &     ThisClass :: OnPaint)) } ,
    

    5.条件编译

    CreateWindow在Unicode和MBCS下执行不同的函数。

    #ifdef UNICODE
    #define CreateWindow  CreateWindowW
    #else
    #define CreateWindow  CreateWindowA
    #endif // !UNICODE
    

    6.预编译宏定义

    c++提供了一些预编译宏定义,__LINE__,__FILE__,__DATE__,__TIME__。

    #include <iostream>
    using namespace std;
    int main () {
       cout << "Value of __LINE__ : " << __LINE__ << endl;
       cout << "Value of __FILE__ : " << __FILE__ << endl;
       cout << "Value of __DATE__ : " << __DATE__ << endl;
       cout << "Value of __TIME__ : " << __TIME__ << endl;
       return 0;
    }
    

    编译输出结果如下

    Value of __LINE__ : 5
    Value of __FILE__ : main.cpp
    Value of __DATE__ : Oct 21 2016
    Value of __TIME__ : 01:01:48
    
    
  • 相关阅读:
    测试流程规范系列(5):BUG提交
    测试流程规范系列(6):测试报告
    测试流程规范系列(7):测试准出
    安全测试系列(1):基本概念
    Linux系列(1):常用命令
    Linux——常用命令详解
    Ant——ant的使用
    java——XML与java对象装换
    SpringMVC——form标签的使用
    SpringMVC案例1——对User表进行CRUD操作
  • 原文地址:https://www.cnblogs.com/lkpp/p/typedef-define.html
Copyright © 2011-2022 走看看