当前位置:首页 » 编程软件 » 预编译宏

预编译宏

发布时间: 2022-02-02 17:13:30

① 新手求解一道关于【宏定义/预编译】的很简单的问题!!!

宏定义是直接代换的
T(a++,a*++b,a+b+c)
被代换成
a++*a+b+c*a*++b/4

(a++)*a+b+c*a*(++b)/4
其中b要先自增一
所以,表达式的值为
3*3+4+5*3*4/4=28

a++自增的值是要在本行语句全部执行完后才增加1的

② iOS开发 预编译的宏可以改吗

iOS开发 预编译的宏是可以改的。改了不会有什么问题的

c语言

难道3不能是字符串吗?

"3*pi"是字符串,"3"是它的子串。
"3*pi"宏展开后为"3*3.1415926"也是字符串,整个源程序都被认为字符串!

现在,还有有编译,编译时,编译器会把3*3.1415926当表达式计算,用结果再替换一次!

④ 怎么在NDK的makefile加入预编译宏

一个程序使用宏:在代码中定义,在编译器编译的时候指定。所谓的makefile只是一个编译系统,最终还是调用编译器。
对于你的问题,在NDK的makefile中加入宏定义,换种说法是:如何给NDK的makefile添加编译选项,有一个LOCAL_CFLAGS就可以定义选项了(或许还有其他的xxxcflags的东西定义,具体就自己查手册)。
加入选项,如:-DMyMacro

ifeq ($(HOST_OS),linux)
LOCAL_CFLAGS := -DGCC
endif
lz要的是在这个吗

⑤ c++当中的预编译宏的问题

#ifndef HY //一般在头文件都都使用这种格式以防止头文件在同一文件中被包含两次。语名#ifndef hyong…..#endi表示仅当以前没有使用预处理器编译指令#define定义的名称hyong时才处理#ifndef….#endif之间的语句。

#define HY //在这里用define定义一个名字HY,以便在下次访问到该头文件时,使该名字已经被定义,从而让程序跳过#ifndef….#endif间的语句。

...

#endif

明白了??
如果还不明白,就下载本人的文章《C++名称空间与作用域专题》和《C++宏,预处理器,RTTI,typeid与强制类型转换》去了解了解吧。

⑥ C语言宏预编译中如何将字符串展开

ide 是 vsts 2005 / 2008 的话可以查看预编译文件
项目属性页 - 配置属性 - c / c++ - 预处理器 - 生成与处理文件 - 是
然后会生成一个后缀名是 .i 的文件,对着 .c .cpp 就可以查看如何展开了。

一般情况下在程序预处理时,一般出现宏名字的地方都用宏定义的字符串替换,然后根据有参数没有参数进行不同的调用。

⑦ c语言gdb调试时怎么看预编译宏是否定义

gdb 看不了任何与宏有关的内容。宏在编译之前,就被预编译器替换掉了,对于编译器来说,根本看不到所谓的宏,所以编译出来的二进制代码中,也根本不会包含任何宏本身的信息,gdb也自然无法获取信息了。

⑧ ios cocoapods怎么添加预编译宏

ALT+F11打开VBE编辑器,将代码放进去,运行(单击工具----宏---宏找到这代码的名字运行就可以了)

⑨ 宏替换,宏展开到底分别在什么时候进行

//在宏 使用的时候 分为

宏定义 和 宏展开, 你那个 宏替换就是展开

宏定义是你自己写的 #define
然后展开在预编译时候处理
这个时候编译器先扫描一遍文件 把用到宏的地方都做字符替换

比如
#define M 1

int a = M;
那么预编译的时候就把 M 替换成1

注意宏只做文本替换,所以
比如 #define MUL(__x__, __y__) __x__ * __y__

int a = MUL(a + b, c+ d);
会被替换成 int a = a + b * c + d // 可能就会和初衷违背(如果你想做的是 (a + b) * (c + b))

从展开的角度来说 因为宏是可以嵌套的 所以宏在替换的时候 我们叫做展开

比如 做一个函数参数声明
#define PARAMS_SET_1(__type__, __name__) __type__ __name__
#define PARAMS_SET_2(__type__, __name__) __type__ __name__##1, __type__ __name__##2

//... 定义N个 PARAMS_SET_N
#define PARAMS(__size__, __type__, __name__) PARAMS_SET_##__size__(__type__, __name__)

然后 定义函数

int foo(PARAMS(2, int, n));
那么预编译的时候宏会这样展开

1, int foo(PARAMS_SET_2(int, n));
2, int foo(int n1, int n2);

另外注意就是编程的时候 由于宏只是文本替换,缺少类型检测 以及运算顺序这样的功能,所以要少用宏

上面所有的宏都有替换的方案
#define M 1 替换方案
struct M
{enum {value = 1} };
int a = M::value;

#define MUL(__x__, __y__) __x__ * __y__ 替换方案
template<int x, int y>
struct MUL
{enum{value = x * y}};

int a = MUL<10 + 20, 10 + 30>::value;

最后一个PARAMS的替换方案就是函数重载
template<typename T>
int foo(T n1);

template<typename T>
int foo(T n1, Tn2);

//后面定义N个

⑩ XCode如何设置预编译宏

编译运行都没问题,但是静态解析会指出有问题。
正确使用设置预编译宏的方法是:

2.找到GCC 4.2 Preprocess, 编辑preprocess marco, 预编译宏

热点内容
samp服务器如何设置ip直播 发布:2025-01-08 12:35:20 浏览:118
5七的算法 发布:2025-01-08 12:30:59 浏览:442
linuxsvn配置 发布:2025-01-08 12:19:11 浏览:380
苹果扁头耳机如何在安卓手机上用 发布:2025-01-08 12:17:37 浏览:109
为什么解绑卡还要密码 发布:2025-01-08 12:13:51 浏览:73
反编译得到源代码的比例 发布:2025-01-08 12:12:36 浏览:619
苹果手机7z怎么解压 发布:2025-01-08 12:11:55 浏览:121
租用的云服务器还需要流量么 发布:2025-01-08 12:11:30 浏览:584
为什么手游对手机配置要求低 发布:2025-01-08 12:06:53 浏览:214
怎么设置qq邮箱独立密码 发布:2025-01-08 11:58:14 浏览:387