c - 强制函数只接受特定定义?

标签 c

我想强制函数参数只接受特定的定义。例如,考虑 #define OUTPUT 1#define INPUT 0void restrictedFunction(int parameter);

我如何强制 restrictedFunction(int parameter) 只接受 OUTPUTINPUT

我还想考虑到另一个定义可能具有相同的值,例如,#define LEFT 1#define RIGHT 0

所以在这种情况下,我希望 restrictedFunction(int parameter) 能够只接受 OUTPUTINPUT

最佳答案

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/

相关文章:

c++ - OpenGL 中的全光灯?

c - 如何根据另外两根字符串制作一根字符串?

c - 不明白输出是如何生成的

c - 内存分配查找

c - 基于结构数据绘制图形 (C)

c - execv 不适用于 "execv("/bin/echo", ["echo","$PATH"] )?

c - C中的指针问题

c - Scanf返回值被忽略并函数重新定义;不同的基本类型

c - C 中的空数组

free() 函数可以在 c 中级联工作吗