C :宏参数可以在其中有空间吗?
C++: Can a macro argument have a space in it?
如果我定义了一个宏的参数如下。
#define define_int(a) int a;
,并提供一个与以下相似的空间的参数
define_int(* a)
并获取输出?
int * a;
预期用途
#define ASSIGN(A,B) B=A;
我想使用此宏直接从函数返回
ASSIGN(A, return B)
以便输出,
return B = A;
空间本身无济于事,因为空格用于分离处理前令牌,并且宏已完成后进行了预处理。因此,您可以添加尽可能多的空间。
唯一的问题是您不能违反语法,因此这个经典错误不会汇编:
#define A (B, C) ... // bad syntax, space between macro name and parameter list
#define A(B, C) ... // ok
是的,您可以写一些晦涩的东西,例如
#define define_int(a) int a;
...
define_int(*const a);
或
define_int(* const a );
并获取类型int*const a;
。
为什么您想编写如此可怕的代码,我不知道。在C中发明自己的秘密宏观语言是其中之一。
关于用一些清理代码从功能宏返回的ASSIGN(A, return B)
之类的编辑,此类宏的不同风味通常是使用的和天真的。
当您需要从多个位置返回时,将清理集中在功能中的正确方法是(伪代码(:
void wrapper (void)
{
something a = allocate_stuff();
error result = the_actual_function(a);
if(result == whatever)
do_that();
cleanup(a);
}
inline error the_actual_function (something a)
{
...
if(bad)
{
return error_42;
}
}
当您只需要在错误时返回时,此设计模式就会减少实际功能内部的混乱。它也摆脱了错误Goto的"基本样式",这是另一种幼稚的写入错误处理程序的方式。
相关文章:
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 使用命名空间在另一个".cpp"文件中定义
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 我写了一个简单的矢量程序,在其中我得到了以下输出。你能帮我理解它的输出吗?
- 为什么我的数组输出一个不在其中的元素
- 定义在其中执行不同代码路径的代码节
- 这是我的 .h 文件的一些错误,当我在其中包含我的类模板时,它显示 [错误] 未终止 #ifndef
- 是否可以检索与柯南包管理器一起打包的库的源代码,以便在其中进行调试?
- C :宏参数可以在其中有空间吗?
- C++要在其中添加接口功能的类层次结构
- 如何制作一个结构程序,在其中可以存储无限量的数据,以便每次您想要时都可以将另一个产品添加到列表中?
- 程序在其中一个案例完成后终止,但对于其他情况则不终止
- openCv 3中的等效polyfit函数在其中
- CMake:如何指定 ctest 应该在其中查找可执行文件的目录
- 使用工程空间在软件包中导入的线性代数库EIGEN
- 如何在其中创建2D字符串向量并插入数据
- C 迭代用于循环并在其中调用功能
- 该代码不会在其中显示任何数字输入.如何使它显示任何输入
- 如何在%appdata%中创建文件夹,在其中创建.bat文件,然后执行它?