#是生成字符串:
#define a(x) #x
a(bc) => "bc"
##是连接:
#define a(x) abc##x
a(123) => abc123
#error是生成编译错误消息:
#ifdef abc
#error something wrong...
#endif
//如果abc是已经定义的宏,那么编译的时候就会显示错误消息something wrong...
//////////////////////////////////////////////////////////////////////
“标准”宏定义一个MIN 输入两参数输出其中最小的
#define MIN(A,B) ((A)<= (B) ? (A) : (B) )
这种定义会带来一些副作用,看下面的例子:
int x = 1, y = 2;
int main()
{
printf("min=%d\n", min(x++, y++));
printf("x = %d, y = %d\n", x, y);
}
执行完min(x++、y++),我们期望x的值为2,y的值为3。
但是,实际的结果是,执行完mini(x++、y++)后,x的值为3,y的值为3,原因在于宏展开后x++被执行了两次。但暂时没找到其它更好的办法。
#define a(x) #x
a(bc) => "bc"
##是连接:
#define a(x) abc##x
a(123) => abc123
#error是生成编译错误消息:
#ifdef abc
#error something wrong...
#endif
//如果abc是已经定义的宏,那么编译的时候就会显示错误消息something wrong...
//////////////////////////////////////////////////////////////////////
“标准”宏定义一个MIN 输入两参数输出其中最小的
#define MIN(A,B) ((A)<= (B) ? (A) : (B) )
这种定义会带来一些副作用,看下面的例子:
int x = 1, y = 2;
int main()
{
printf("min=%d\n", min(x++, y++));
printf("x = %d, y = %d\n", x, y);
}
执行完min(x++、y++),我们期望x的值为2,y的值为3。
但是,实际的结果是,执行完mini(x++、y++)后,x的值为3,y的值为3,原因在于宏展开后x++被执行了两次。但暂时没找到其它更好的办法。
发表评论
-
gcc gdb常用命令
2010-10-06 11:20 1115gdb 链接: http://fanqiang.chinau ... -
指针数组,数组指针
2010-10-02 14:40 716void test(char* a[]) { ... -
如何用栈实现递归与非递归的转换
2010-04-10 15:18 944http://bbs.chinaunix.net/viewth ... -
华为笔试2
2009-06-16 09:37 977【转】http://hi.baidu.com/xiao1dia ... -
华为笔试1
2009-06-16 09:35 1011【转】http://hi.baidu.com/xi ... -
用两个栈实现一个队列的功能
2009-06-03 15:22 2573【转】http://hi.baidu.com/liangjw8 ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:41 1044【转】http://blog.csdn.net/s ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:39 1500【转】http://blog.csdn.net/seraphs ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:38 870【转】http://blog.csdn.net/s ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:37 871【转】http://blog.csdn.net/s ... -
排序算法和二分查找
2009-05-17 15:50 808using namespace std; #includ ... -
C移位
2009-05-15 09:56 1360【转】 C提供了六种位运算运算符;这些运算符可能只允许整型操作 ... -
sizeof union struct 内存对齐
2009-05-14 20:30 2541【转】http://www.programfan.com/bl ... -
求100的阶乘
2009-05-06 16:32 1535#include <stdio.h> int m ... -
字符串操作
2009-05-03 15:19 813#include "stdafx.h" ... -
C字符串反转
2009-05-03 10:53 1785更改下面程序 #include string.h ... -
C链表相关
2009-05-03 10:38 781#include "stdafx.h" ... -
C题库连接
2009-04-29 09:28 759http://blog.chinaunix.net/u2/64 ...
相关推荐
在C/C++编程中,预编译指令是代码编译过程中的重要组成部分,它们主要用于处理源代码中的条件编译和宏定义。`#define`, `#ifdef`, `#endif`等预编译指令帮助程序员根据特定条件来决定哪些代码应该被编译,从而实现...
在实践中,现代的C编译器如GCC和Clang已经集成了高效的预处理器,它们处理`#include`和`#define`以及其他预处理指令的能力远超我们的简单实现。然而,理解这些基本概念对于任何想要深入研究编译器原理的开发者来说都...
C/C++ 中 #ifndef 和 #define 的用法 #ifndef 和 #define 是 C 语言中的两个重要命令,它们在实际编程中扮演着重要角色。#ifndef 命令用来判断一个宏是否已经定义,而 #define 命令则用来定义一个宏。下面我们将...
在C语言编程中,`#define`是一个非常强大的预处理器指令,它被广泛用于定义宏、常量或简化的类型声明等。然而,`#define`的不当使用可能会引入一系列的问题和陷阱,本文将深入探讨这些陷阱及其解决方法。 #### 宏...
在C语言中,宏定义是使用预处理器指令#define实现的一种编译前文本替换机制。它在编译之前处理源代码,使得可以定义常量、实现内联函数以及防止头文件被重复包含等多种功能。下面详细说明标题和描述中提到的知识点。...
使用#define定义的宏变量实际上并没有内存地址,它们在预编译时就被替换成了相应的值,或者更准确地说是代码文本。因此,如果在代码中多次使用了#define宏,其替换出来的代码会多次出现在最终的程序中,这会导致最终...
**预处理指令** 是 C/C++ 编程语言中的一个重要组成部分,它在编译之前由预处理器执行。预处理指令通常用于宏定义、文件包含、条件编译等操作。这些指令以 `#` 字符开头,后面跟具体的指令内容。 #### 二、`#ifndef...
在C/C++编程中,宏定义(#define)是一种预处理器指令,用于创建符号常量或简单的文本替换。宏在程序编译时起作用,它不是真正的函数,但可以通过模拟函数调用来实现类似的功能,从而提高代码的可读性和可维护性。在...
### C语言预编译教程详解 #### 宏定义——C语言的强大工具 宏定义是C语言预编译过程中的一个重要特性,它允许程序员在编译前定义文本替换规则,从而增强代码的可读性、可维护性和灵活性。宏定义分为无参数宏定义和...
在 C 语言中,宏定义(#define)是一种非常重要的预处理器指令,它可以让我们在编译前对代码进行修改和扩展。本文将对宏定义的用法进行总结,包括简单的宏定义、带参数的宏、宏的特殊单行定义、多行定义、条件编译、...
在C/C++编程中,预处理指令是非常重要的组成部分,它们在编译前由预处理器执行,能够帮助开发者实现代码重用、条件编译等功能。本文将重点讨论 `#ifndef` 和 `#define` 这两个预处理指令的区别与用法。 #### 二、#...
在C/C++编程中,`#define`预处理器指令扮演着重要的角色,它可以用来定义常量、创建类似函数的功能以及实现条件编译等。下面我们将深入探讨`#define`的各种用法。 1. **简单的#define定义** `#define`常用于创建...
在C++和C语言中,预处理器指令`#define`被广泛用于定义宏,这些宏可以包含简单的替换文本,也可以进行复杂的条件判断和参数处理。本文将详细介绍宏定义中的`#`和`##`符号的含义,并通过具体示例来说明它们的应用场景...
C语言中条件编译相关的预编译指令 C语言中条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定宏是否被定义来确定编译条件。下面将详细介绍条件编译中使用的预编译指令。 一...
标题"java 支持C语言预编译指令"表明,这里可能涉及一种方法或工具,使得 Java 开发者能够在 Java 代码中使用类似于 C 预编译指令的功能。这通常通过编写脚本或使用第三方库来实现。例如,`gcc2java.sh` 文件很可能...
在这个阶段,编译器会处理以 "#" 开头的预编译指令,如 #include、#define、#if 等。 预编译指令是编译器在编译过程中执行的一些特殊的指令,它们可以出现在程序中的任何位置。常见的预编译指令有: 1. #include ...
在C语言中,宏定义是预处理器(Preprocessor)的一项重要功能,用于在编译阶段进行文本替换。宏定义通常用于简化代码、提高代码可读性、实现代码复用等目的。本文将深入探讨`#ifndef`、`#define`和`#endif`这三个预...
在C/C++编程语言中,`#define` 是预处理器指令,用于创建宏定义,它在编译阶段执行文本替换,使得代码更加灵活且可定制化。宏定义是C/C++编程中的一个重要概念,它可以帮助程序员实现代码复用、简化复杂表达式、提供...
在C及C++编程中,`#define`是一个非常强大的预处理器指令,用于创建宏。宏可以在编译前阶段替代代码片段,提高代码的复用性与可维护性。本文将详细探讨`#define`的各种使用场景及其背后的原理。 #### 二、基本结构 ...
预编译是编程语言中的一个重要概念,尤其在C语言中占有极其重要的地位。预编译是指在源代码正式编译之前进行的一系列处理操作。这些操作主要包括宏定义、文件包含以及条件编译等。 #### 二、预编译的过程 预编译...