关闭

c++ 宏展开

896人阅读 评论(0) 收藏 举报
分类:

 window上的宏展开:

宏在我们的代码中能经常给我们带来很大的便利,但是有些宏会造成意向不到的错误,能够查看宏展开就能够查看宏错误的根源。VS2008对编译是不保存预处理的文件信息的,而宏展开的信息就是在预编译阶段。如下图:

      预编译选项

      工程属性--》配置属性--》c/c++--》预处理器--》生成预处理文件,默认“否”是不生成预编译文件的。生成的预编译文件是项目文件下的.i文件,想要产生此文件,可选择“生成预处理文件”的选项“带行号(/P)”或者“不带行号(/EP /P)

#include <stdio.h>
#define SUM(a,b) a+b
#define arrLen(arr) sizeof(arr)/sizeof(arr[0])
int main(){
	int c = 3, d = 4;
	int sum = SUM(c, d);
	printf("sum=%d", sum);
	int data[] = { 5,6,8,9,6,4 };
	for (int i = 0; i < arrLen(data); i++)
	{
		printf("%d\n", data[i]);
	}
	return 0;
}

红展开的文件 .i文件(节选)

# 3 "main.cpp" 2

int main(){

 int c = 3, d = 4;
 int sum = c+d;
 printf("sum=%d", sum);
 int data[] = { 5,6,8,9,6,4 };
 for (int i = 0; i < sizeof(data)/sizeof(data[0]); i++)
 {
  printf("%d\n", data[i]);
 }
 return 0;
}
项目、属性、配置属性、C/C++、命令行、附加选项(D):/EP /P、确定。
Linux上的宏展开:

g++ -E -P main.cpp > main.i

gcc -E -P main.cpp > main.i





0
0
查看评论

C/C++-技巧-宏

一、宏基础 宏在c/c++中扮演者比较重要的角色,虽然难以阅读和调试的缺点让宏的使用饱受诟病,但是在一些特殊的情况下,使用宏会带来极大的方便,甚至可以实现一些用其他方式无法实现的功能。 在c/c++程序编译的过程中,编译器对宏的处理是在预编译阶段进行的,处理方式的核心思想是:简单替换,编译器并不会对...
  • u011787119
  • u011787119
  • 2016-12-25 18:59
  • 2006

C++宏的使用

C/C++宏的使用 1. 防止多重包含 2 2. 条件编译 2 3. 定义字面值常量 2 4. 定义为函数 2 5. 可变参数宏 3 6. 宏组合 3 6.1...
  • hgl868
  • hgl868
  • 2011-12-09 17:09
  • 4213

C++中宏和函数的区别

宏和函数写法以及调用方式,有很大的相似,但是他们却存在本质上的区别,函数调用时将实参表达式值求出来,然后赋值给形参,计算结果,而宏则是对实参表达式不做计算,直接替换。 eg: int fun(int y){ return y*y; } #define FUN(y)  y*y; int tm...
  • hsd2012
  • hsd2012
  • 2016-01-11 20:45
  • 662

[c、c++]宏中"#"和"##"的用法(zz)

[c、c++]宏中"#"和"##"的用法(zz)宏中"#"和"##"的用法一、一般用法我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.用法:#include#includeusing namespace ...
  • blackbillow
  • blackbillow
  • 2009-01-22 16:51
  • 37011

C/C++中的宏的使用技巧(宏嵌套/宏展开/可变参数宏)

首先,必须说明的是,如果你用C++,应当尽可能的避免使用宏。 然后,宏有其强大和便捷之处。接下来,简单介绍一下,工作学习中,遇到的一些关于宏的使用技巧,算是对工作的一个总结。 1、#和## #:把宏参数转换为字符串。不管该参数宏什么,即“原貌”用字符串显示出来 如#define Log(...
  • Pillary
  • Pillary
  • 2016-12-17 12:17
  • 3944

C++预处理命令#define宏(macro)展开的若干用法

提及#define,你会不会马上联想到自己时时用#define MAX 100用于标记一个数组的长度?这样做无非两个原因,一来,#define是编译时的宏展开,对运行时间毫无影响。其二,使用诸如MAX这类见名知其意的标识符代替生硬的数学符号使程序更加清晰,而且更改起来着实方便,一
  • ajioy
  • ajioy
  • 2011-10-12 19:44
  • 6972

查看gcc/g++预定义宏

gcc -posix -E -dM -  g++ -posix -E -dM -  够简单吧
  • lonelysky
  • lonelysky
  • 2016-09-07 17:44
  • 1113

利用GCC预处理展开宏

http://blog.csdn.net/dyufei/article/details/7844566 C/C++在编译的过程中,依次进行:预处理,编译,汇编,链接。宏是在预处理时展开的而 gcc 的预处理选项为-E。   所以将调用宏的那部分代码单独提取出来,然后利用gcc...
  • linking530
  • linking530
  • 2012-08-15 19:30
  • 2214

c-c++宏展开

c/c++宏展开c/c++在编译过程中,预处理阶段会进行宏的展开。 定义一些复杂的宏的情况下,宏非常容易写错误,我们就需要把宏先展开,看一下是否自己预期的代码。 下面以main.c举例1. gcc系列的编译器:-E参数,只进行预编译,宏展开预编译main.c输出到main.i文件中,然后查看main...
  • qq_16135205
  • qq_16135205
  • 2017-12-08 10:29
  • 63

使用gcc的-E -P选项展开源代码中的宏

gcc -E -P xxx.c -o xxx.cpp
  • SdustLiYang
  • SdustLiYang
  • 2015-06-24 14:40
  • 868
    个人资料
    • 访问:2227736次
    • 积分:29705
    • 等级:
    • 排名:第205名
    • 原创:785篇
    • 转载:395篇
    • 译文:0篇
    • 评论:246条
    我的技术博客
    最新评论