宏定义函数指针类型&函数返回左值类值

宏定义函数指针类型&函数返回左值类值

1。宏定义不分配内存,变量定义分配内存。

2。宏名和参数的括号间不能有空格

3。宏替换只作替换,不做计算,不做表达式求解

//下面是正确的标准的写法
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);

//下面两种宏的写法容易出错,是宏定义中应避免的,
typedef int FUNC1 (int in);
typedef int FUNC2 (int*,int*,int*);
//当FUNC1为int*时,就容易造成歧义,有时不能达到我们所要求的目的。


typedef int *p (int in);//表示p是一个函数,这个函数的返回类型是int* ,这个函数只有一个整型形参;
typedef int(*p) (int*,int*,int*);//表示p是一个函数指针,这个函数指针指向的函数有三个整形指针形参,指向的函数返回类型是int 。 

##################################

定义函数指针类型:

  typedef int (*fun_ptr)(int,int);

以上gcc,g++中测试通过

1 #include <sys/epoll.h>
2 #include <pthread.h>
3 #include <stdio.h>
4 #include <unistd.h>
5 int (*p)();//定义函数指针和函数指针类型在g++ gcc都可以
6 typedef int& (*P)();//定义函数指针和函数指针类型在g++ gcc都可以
7 P p1,p2;
8 int x = 0;
9 int& setx()//只在g++可以这样函数
10 {
11     return x;
12 }
13 int main (void)
14 {
15     p1 = setx;
16     //p1()=92;
17     printf("%d", p1());
18     return 0;
19 }
为了您的安全,请只打开来源可靠的网址

打开网站    取消
来自: http://hi.baidu.com/jrckkyy/blog/item/d7ccb5086429c33ce8248866.html

&lt;think&gt;嗯,用户之前问了关于函数返回作为左的情况,现在又转向inline函数的优点。可能他们正在学习C++,或者复习相关的函数特性。首先,我需要确认用户对inline函数的理解程度,是否需要从基础开始解释。 用户之前的问题涉及到函数返回引用和指针,可能他们已经对普通函数和它们的调用机制有了一定的了解。现在问inline的优点,可能是在优化代码或者性能调优时遇到了问题。常见的inline函数的优点包括减少函数调用的开销,提高执行速度,尤其是对于小函数来说。但需要深入解释这些优点,以及适用的场景。 同时,用户可能没有明确的问题,比如inline的缺点或者使用时的注意事项,但作为回答,我应该全面一点,但重点放在优点上。可能需要提到编译器最终是否内联的决定权,以及inline在现代编译器中的自动优化,避免用户滥用inline导致代码膨胀。 另外,用户可能想知道inline和宏的区别,特别是C++中inline相比C宏的优势,比如类型安全和避免重复求。虽然用户没有直接问,但作为补充信息可能会有帮助。 还要注意,用户可能对链接时的多重定义问题有疑问,inline函数可以在头文件中定义而不会引发链接错误,这也是一个优点。需要用简单的例子说明,比如在多个cpp文件中包含同一个头文件中的inline函数,而不会导致重复定义的错误。 总结起来,回答应该涵盖性能优化、减少开销、编译器优化、适用场景、与宏的比较、避免链接错误等方面。同时,语言要简洁明了,适合已经有一定C++基础的学习者。需要避免过于技术化的术语,但也要准确,比如提到函数调用开销的具体内容,如压栈、跳转、返回等步骤。&lt;/think&gt;--- **内联函数(inline function)** 是 C++ 中一种通过编译器优化来提升程序性能的机制,其核心目的是**用函数体的代码直接替换函数调用**,从而减少函数调用的开销。以下是其核心优点和适用场景: --- ### **主要优点** 1. **减少函数调用开销** - **普通函数调用**需要压栈参数、跳转执行、返回结果等步骤,而内联函数会**在调用处直接展开函数体**,省去这些开销。 - **适用场景**:频繁调用的小型函数(如简单的 getter/setter)。 2. **提升执行效率** - 对于简单的逻辑(如条件判断、数计算),内联展开后编译器可能进一步优化生成的代码(如删除冗余指令)。 3. **避免宏的缺陷** - 传统 C 语言用宏(`#define`)实现类似功能,但宏不进行类型检查且可能引发副作用(如多次求)。 - **示例对比**: ```cpp // 宏的副作用 #define SQUARE(x) ((x)*(x)) int a = 1; int b = SQUARE(a++); // 展开为 (a++)*(a++),结果不可预期 // 内联函数安全 inline int square(int x) { return x * x; } int c = square(a++); // 安全:等价于 (a++) 的一次计算 ``` 4. **支持编译器优化** - 内联后编译器能更直观地分析代码上下文,进行**常量传播**、**死代码消除**等优化。 5. **解决头文件中的函数定义问题** - 普通函数在头文件中定义会导致**多重定义链接错误**,而 `inline` 函数允许在多个编译单元中重复定义,链接时自动合并。 --- ### **适用场景** - **函数体短小**(通常 1-5 行代码)。 - **频繁调用**(如循环中的简单操作)。 - **需要替代宏**(需类型安全且无副作用时)。 --- ### **注意事项** 1. **编译器自主决策** - `inline` 只是对编译器的建议,最终是否内联由编译器决定(如复杂函数可能被忽略)。 - 现代编译器(如 GCC、Clang)通常自动内联小函数,无需手动添加 `inline` 关键字。 2. **潜在缺点** - **代码膨胀**:过度内联大型函数会增加二进制文件体积,可能降低缓存命中率。 - **调试困难**:内联函数在调试时无法单步跟踪(代码被展开)。 --- ### **示例代码** ```cpp // 头文件 example.h inline int max(int a, int b) { return (a &gt; b) ? a : b; } // 调用处 int x = 10, y = 20; int result = max(x, y); // 展开为 (x &gt; y) ? x : y ``` --- ### **总结** 内联函数通过消除调用开销提升性能,适合短小且高频调用的逻辑,同时避免了宏的缺陷。合理使用可优化关键代码路径,但需避免滥用导致代码膨胀。现代编译器已具备智能内联能力,开发者应优先关注代码可读性,仅在必要时手动干预。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值