定义宏A
#define A fun()
函数 fun()
LPCTSTR fun(){
return A ;
}
这样肯定会内存溢出的,
但是现在看的一个项目,逻辑就是这样,
用的时候 CString str = A;
在跟进到函数fun()里头时,A已经被附了值了,而不是再调用函数fun
有没有人给个思路,这个值会是在哪附上的,或者怎么调试,知道函数fun中A的值是从哪来的
#define A fun()
LPCTSTR fun()
{
return A ;//这里又是调用fun
}
void main()
{
CString s = A; //这里调用fun
}
//这个程序不是死循环????
...
然后再跟进函数,发现A B C的值还是原来的值,这就让我更迷惑了
没看懂,A B C是宏,又不是变量或者其他,在调试的时候,不知道怎么看A B C的值。
详细讲解了C语言的两大宏定义
定义 “#”是将宏字符串化(Stringification),“##”是将##左右两边的标签拼接在一起(## is called token concatenation, used to concatenate two tokens in a macro invocation) 例子 看一段代码 #include&...
内核中有很多的宏定义,在宏定义define中经常看到两个字符串##和#,这里把它的用法做一下说明: ##是一个连接符号,用于把参数连在一起 例如: > #define FOO(arg) my##arg 则 > FOO(abc) 相当于 ...
宏定义的黑魔法 - 宏菜鸟起飞手册 宏定义在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行。而在更高层级进行...
宏定义在C/C++中使用的非常多,一方面定义一些常量,另一方面定义一些通用函数,但是有些宏定义实现较为复杂,尤其是很多带#或##的宏定义,令很多人读起来很不解,下面就简单介绍一下宏定义中的#和##。 宏定义里面...
1.1 宏定义的基本语法 1.2 宏定义的优点 1.3 宏定义的缺点 1.4 宏还是函数 2 使用宏时的注意点 2.1 算符优先级问题 2.2 分号吞噬问题 2.3 宏参数重复调用 2.4 对自身的递归引用 3. 宏函数的集中特定语法 3.1 ...
C语言中用到宏定义的地方很多,如在头文件中为了防止头文件被重复包含,则用到: #ifndef cTest_Header_h #define cTest_Header_h //头文件内容 #endif 在我们常用的 stdio.h 头文件中也可以见到很多...
C语言中用到宏定义的地方很多,如在头文件中为了防止头文件被重复包含,则用到:#ifndef cTest_Header_h #define cTest_Header_h //头文件内容 #endif在我们常用的 stdio.h 头文件中也可以见到很多宏定义,如:#...
转自: http://blog.csdn.net/lbsljn/article/details/4277788 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H
C语言常用宏定义常用宏定义数值相关的宏定义字符相关的宏定义byte相关的宏定义bit相关的宏定义数组与结构体相关的宏定义对齐的宏定义 常用宏定义 数值相关的宏定义 闰年的判断 ,年份可以整除4并且不能整除...
宏定义有无参数宏定义和带参数宏定义两种。 无参数的宏定义的一般形式为 # define 标识符 字符序列 其中# define之后的标识符称为宏定义名(简称宏名),要求宏名与字符序列之间用空格符分隔。这种宏定义要求编译...
C预处理器在源代码编译之前对其进行一些文本性质的操作,主要任务包括删除注释、插入被#include进来的文件内容、定义和替换由#define 定义的符号以及确定代码部分内容是否根据条件编译(#if )来进行编译。...
宏定义是比较常用的预处理指令,即使用“标识符”来表示“替换列表”中的内容。标识符称为宏名,在预处理过程中,预处理器会把源程序中所有宏名,替换成宏定义中替换列表中的内容。 常见的宏定义有两种,不带参数的...
要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏...
之前对C语言的头文件和宏定义抱着一知半解的态度,现理清思路并以文字的形式整理出来,以供不时之需 头文件 头文件,顾名思义就是定义在C语言文件头部的那一坨东西 #include 这就是一个标准输入输出的...
C语言 宏定义、数组宏定义数组字符串 宏定义 介绍 1)宏定义就是用一个标识符来表示一个字符串,如果后面代码中出现了该标识符,就全部替换成指定的字符串; 2)定义格式: #define 宏名 字符串 宏名是一种标识符,...
//在qglobal.h中,我们可以看到以下两句胡宏定义 # define QT_BEGIN_NAMESPACE namespace QT_NAMESPACE { # define QT_END_NAMESPACE } QT_BEGIN_NAMESPACE class QAction; class QMenu; class QPlainTextEdi...
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,...
宏定义就是直接替换,直接替换!宏定义的直接替换,就是最直接的替换 宏定义的直接替换,就是最直接的替换 下面以两个宏定义的简单函数为例,注意f(x) 和g(x)表达式的不同,前者没有括号,后者有括号。 #include <...
这句几乎每个类都有,一开始以为是TypeName(“xxx”)调用构造函数,细看不太对,应该是调用宏定义的函数,这个宏函数原型在$SRC/OpenFOAM/db/typeInfo文件里定义的。 如下: #define TypeName(TypeNameString) ...
宏定义的参数以逗号(,)作为分隔符 #include <stdio.h> #define FUN(AA,aa) {AA;printf("%d\n",aa);} void fun ( void ) FUN ( printf ( "你好\n" ); printf ( "我好\n&...
c /c++语言中使用宏的主要目的主要有 3 个: 1. 提高代码的可读性; 把用到的常量定义成有意义的名字; 2. 无需函数调用,运行效率高; 对于一些简单的操作,无需调用函数,虽然编程是强调模块化,但是函数调用时,...
在工程规模较小,不是很复杂,与硬件结合紧密,要求移植性的时候,可采用宏定义简化编程,增强程序可读性。 当宏作为常量使用时,C程序员习惯在名字中只使用大写字母。但是并没有如何将用于其他目的的宏大写的统一...
定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。 输入 两个数,空格隔开 输出 交换后的两个数,空格隔开 样例输入 1 2 ...
在头文件中的宏定义随着头文件一同被包含到源文件中时,此时宏定义在该源文件中有效,当头文件中的宏定义随着该头文件一起被包含到另一个头文件中,而这另一个头文件又被另一个源文件包含,则该宏定义在最终被包含的...
毕竟是小白,从小白视角看可能不会太深,但应该都能看懂。 这篇博客就是也是写给新手的,希望大家都能学懂学好,嘿嘿,写的不好还望大佬勿喷。
使用语句表达式来定义宏,不仅可以实现复杂的功能,而且还能避免宏定义带来的歧义和漏洞。下面以一个简单的最小值的宏为例子一步步说明。 1、灰常简单的么,使用条件运算符就能完成,不就是 #define MIN(x,y) x &...
my.text printf("%s\n","I am little boy!"); A.h //在A.h中引用B.h,在B.h中引用A.h会循环引用 (错误 ...//如果没有定义AH,定义AH /* #ifndef AH #define AH #include "B.h" void printfA(); #endif // !...
#define 宏定义可以定义在代码的任何地方,从本行宏定义开始到后面代码都认识这个宏;可以把任何东西定义成宏。因为编译器在预编译的时候用真身替换替身,然而在代码里面却又常用替身来帮忙。宏定义是个演技高超的...
无参宏定义 (1)无参宏定义的一般格式:#define 标识符 语言符号 字符串 其中:"define"为宏定义命令;"标识符"为所定义的宏名,通常用大写字母表示,以便于与变量区别;“语言符号字符串”可以...