我想强制函数参数只接受特定的定义。例如,考虑 #define OUTPUT 1
、#define INPUT 0
和 void restrictedFunction(int parameter);
。
我如何强制 restrictedFunction(int parameter)
只接受 OUTPUT
或 INPUT
?
我还想考虑到另一个定义可能具有相同的值,例如,#define LEFT 1
和 #define RIGHT 0
。
所以在这种情况下,我希望 restrictedFunction(int parameter)
能够只接受 OUTPUT
和 INPUT
。
最佳答案
typedef enum { INPUT = 0, OUTPUT = 1 } IO_Type;
void restrictedFunction(IO_Type parameter) { ... }
它不会绝对强制使用值(编译器会让某人编写 restrictedFunction(4)
),但它与您将获得的一样好。
如果你真的想强制使用正确的类型,那么:
typedef enum { INPUT = 0, OUTPUT = 1 } IO_Type;
typedef struct { IO_Type io_type } IO_Param;
void restrictedFunction(IO_Param parameter) { ... }
在 C99 或更高版本中,您可以调用它:
restrictedFunction((IO_Param){ INPUT });
这是一个复合文字,动态创建一个结构。目前还不完全清楚结构类型是否真的很适合你,但它会迫使用户稍微思考一下,并且可能会在他们使用错误时改进编译器的诊断(但他们可能会使用 restrictedFunction(( IO_Param){ 4 });
仍然).
这意味着您的 restrictedFunction()
代码应该准备好验证参数:
void restrictedFunction(IO_Type io_type)
{
switch (io_type)
{
case INPUT:
...do input handling...
break;
case OUTPUT:
...do output handling...
break;
default:
assert(io_type != INPUT && io_type != OUTPUT);
...or other error handling...
break;
}
}
关于c - 强制函数只接受特定定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12865775/