`

你也许不知道的#define用法

 
阅读更多

最近看com相关的资料,看到CCmdTarget实现com接口的时候,去读了一些宏的定义,在afxdisp.h头文件中

#define BEGIN_INTERFACE_PART(localClass, baseClass) \
 class X##localClass : public baseClass \

本来这个宏定义很容易理解的,但是这里多出个X##,我真没见过这种用法,不晓得它是什么用意。
后来问了几个朋友也都不知道。

你知道么?

也许你也不知道~呵呵,最后我还是找到了相关的资料,解读了这个define,还顺便认识了另外两个不常用的define

#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x

x##y表示什么?表示x连接y,举例说:
int  n = Conn(123,456);  结果就是n=123456;
char* str = Conn("asdf", "adf")结果就是 str = "asdfadf";
怎么样,很神奇吧

再来看#@x,其实就是给x加上单引号,结果返回是一个const char。举例说:
char a = ToChar(1);结果就是a='1';
做个越界试验char a = ToChar(123);结果是a='3';
但是如果你的参数超过四个字符,编译器就给给你报错了!error C2015: too many characters in constant   :P

最后看看#x,估计你也明白了,他是给x加双引号
char* str = ToString(123132);就成了str="123132";

最后留几个小试验给大家去测测:
#define Dec(x,y) (x-y)
int n = Dec( A(123,1), 1230);
n = Conn(123, Conn(123,332) );
char* str = A("12", ToString( Dec(3,1));

分享到:
评论

相关推荐

    【C/C++】#ifndef,#define用法

    C/C++ 中 #ifndef 和 #define 的用法 #ifndef 和 #define 是 C 语言中的两个重要命令,它们在实际编程中扮演着重要角色。#ifndef 命令用来判断一个宏是否已经定义,而 #define 命令则用来定义一个宏。下面我们将...

    #define 问题 用法陷阱

    然而,`#define`的不当使用可能会引入一系列的问题和陷阱,本文将深入探讨这些陷阱及其解决方法。 #### 宏定义陷阱 ##### 1. 括号的重要性 当定义一个宏时,如果不正确地使用括号,可能会导致意想不到的结果。...

    C语言 #define用法集锦[修正版]

    ### C语言 #define 用法集锦 #### 1. 简单的 `#define` 定义 `#define` 指令在C语言中被广泛用于定义符号常量,即所谓的宏定义。它允许程序员为特定的值或表达式赋予一个标识符,从而简化代码编写并提高可读性。 ...

    #define——用法大全

    关于 #define 指令的用法大全 #define 指令是 C 语言中的一种预处理指令,用于给常量赋予一个有意义的名称。在本文中,我们将详细介绍 #define 指令的用法、实例和注意事项。 定义 ---- #define 指令的基本语法有...

    #define用法集锦.doc

    《#define 用法集锦》 在C/C++编程中,`#define`预处理器指令扮演着重要的角色,它可以用来定义常量、创建类似函数的功能以及实现条件编译等。下面我们将深入探讨`#define`的各种用法。 1. **简单的#define定义** ...

    #ifndef #define #endif的用法

    ### #ifndef #define #endif 的使用详解 #### 一、预处理指令简介 在深入讨论 `#ifndef`, `#define`, `#endif` 这三个预处理指令之前,我们需要先了解预处理指令的基本概念。 **预处理指令** 是 C/C++ 编程语言中...

    #indef 与#define 区别于用法

    ### #ifndef 与 #define 的区别及用法详解 #### 一、概述 在C/C++编程中,预处理指令是非常重要的组成部分,它们在编译前由预处理器执行,能够帮助开发者实现代码重用、条件编译等功能。本文将重点讨论 `#ifndef` ...

    #define的使用技巧

    在C语言中,宏定义是使用预处理器指令#define实现的一种编译前文本替换机制。它在编译之前处理源代码,使得可以定义常量、实现内联函数以及防止头文件被重复包含等多种功能。下面详细说明标题和描述中提到的知识点。...

    宏定义#define用法总结

    C语言中宏定义#define用法总结 在 C 语言中,宏定义(#define)是一种非常重要的预处理器指令,它可以让我们在编译前对代码进行修改和扩展。本文将对宏定义的用法进行总结,包括简单的宏定义、带参数的宏、宏的特殊...

    宏(#define)定义函数妙用

    例如,`SUM(a + b, c + d)` 使用宏 `#define SUM(x, y) x + y` 会被错误地展开为 `a + b + c + d`,而不是 `(a + b) + (c + d)`。为了避免这种情况,通常需要在宏定义中加入额外的括号。 此外,宏定义不支持重载,...

    预编译#define_#ifdef_#endif用法

    这对于调试和优化代码非常有用,因为你可以轻松地开关调试模式。在上面的例子中,当DEBUG被定义时,`#ifdef DEBUG`后面的代码块才会被编译并执行,否则这部分代码将被忽略。 `#ifdef`是检查某个宏是否已被定义的...

    #define 宏定义的一些用法总结

    ### #define宏定义的一些用法总结 #### 一、引言 在C及C++编程中,`#define`是一个非常强大的预处理器指令,用于创建宏。宏可以在编译前阶段替代代码片段,提高代码的复用性与可维护性。本文将详细探讨`#define`的...

    define用法完全集锦

    ### #define用法完全集锦 #### 一、概述 `#define` 是 C/C++ 预处理器指令中非常重要的一部分,它允许开发者为程序中的常量赋予有意义的名字,简化了代码的阅读与维护。本文将详细介绍 `#define` 的各种用法及其...

    C语言中const与#define的区别

    如果需要在代码中简单快速地进行文本替换,或者定义一些程序中不希望被修改的常量值,使用#define可能会更方便。然而,随着编程实践的深入,我们逐渐认识到,虽然#define可以用于定义简单的常量,但是const提供的是...

    typedef和#define的用法与区别

    typedef和#define的用法与区别 一、typedef的用法 在C/C++语言中,typedef是一种语言编译过程中的一部分,它常用来定义一个标识符及关键字的别名。它并不实际分配内存空间,实例像:typedef int INT;typedef int ...

    常用宏定义#define

    下面我们将详细探讨`#define`宏定义的各种应用场景及其使用方法。 1. **常量定义**: 使用`#define`可以方便地定义常量,避免使用`const`关键字时产生的对象。例如: ```c #define PI 3.14159 ``` 在之后的...

    define使用

    本文将从多个方面详细介绍 `#define` 的使用方法,并通过具体示例帮助读者更好地理解和应用。 #### 1. 常量定义 `#define` 最基本也是最常见的用途之一是用于常量的定义。例如,在 C/C++ 语言中,可以通过如下方式...

    C#中#define后面只加一个参数的解释

    首先,让我们来看一下 `#define` 指令的基本用法。在 C# 中,`#define` 指令用于定义一个宏,该宏可以在编译前被替换为指定的值。例如,`#define PI 3.14` 将定义一个名为 `PI` 的宏,该宏的值为 `3.14`。在编译过程...

    头文件加#ifndef #define #endif.pdf

    在给定的文件“头文件加#ifndef #define #endif.pdf”中,主要介绍了使用预处理器指令`#ifndef`、`#define`和`#endif`来避免头文件重复包含的方法。 #### 一、问题背景与解决方案 **问题描述:** 假设我们有两个...

Global site tag (gtag.js) - Google Analytics