c++ - C/C++ 中单个参数(函数)中的多个参数

标签 c++ c function parameters bit-manipulation

好吧,这个标题听起来可能有点含糊,但那是因为我不知道如何用不同的方式来表达它。我将尝试解释我的意思:在某些库中,'init' 函数经常接受一些参数,但该参数随后接受多个参数(正确..)。一个例子,就像这样:

apiHeader.h

#define API_FULLSCREEN   0x10003003
#define API_NO_DELAY     0x10003004
#define API_BLAH_BLAH    0x10003005

主.c:

apiInit(0, 10, 10, 2, API_FULLSCREEN | API_NO_DELAY | API_BLAH_BLAH);

这是如何运作的?我无法在任何地方找到答案,很可能是因为我不知道它的实际名称,所以我不知道要搜索什么。这对我当前的项目非常有用。

提前致谢!

最佳答案

参数通常称为“$FOO flags”,值是-ed。关键是参数是一个数字类型,它被构造为多个可能值的按位

在处理函数中,值通常用位and来测试:

if ( (flags & API_FULLSCREEN) != 0 )

您必须小心地以保持 OR 运算线性的方式分配值。换句话说,不要像在 header 中那样在两个不同的 可用值中设置相同的位。例如,

#define API_FULLSCREEN   0x1
#define API_NO_DELAY     0x2
#define API_BLAH_BLAH    0x4

有效并允许您解构函数中标志的所有组合,但是

#define API_FULLSCREEN   0x1
#define API_NO_DELAY     0x2
#define API_BLAH_BLAH    0x3

不是因为API_FULLSCREEN | API_NO_DELAY == API_BLAH_BLAH

从更高的层次来看,一个flags int是一个穷人的可变参数列表。如果您考虑使用 C++,您应该将此类细节封装在一个类中,或者至少封装在一个 std::bitset 中。

关于c++ - C/C++ 中单个参数(函数)中的多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8699740/

相关文章:

c++ - 防止 Qt 生成快捷方式?

c++ - 将两个网格合并为一个

c - 函数指针和函数地址

javascript - 如何重构多个 if...else 以提高效率?

r - 如何在R中获得矩阵的正确特征向量?

c++ - 试图理解函数中指针的使用

c++ - 返回常量引用

C释放内存的问题,valgrind错误

c - 文件的内存映射是否存在

c++ - 在静态函数中调用成员函数指针