gpt4 book ai didi

c - 运行时导出 C API 限制

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:44 27 4
gpt4 key购买 nike

我正在为嵌入式 Linux 设备编写 C API。我的问题是该软件必须是可移植的(在不同的平台上运行)而无需任何进一步的调整。最好不要使用编译时 key (#ifdefs)。

问题是我需要从我下面的硬件和 API 导出一些功能。这应该在运行时完成。

比如说,我有一个定义 XYZ 位置的结构,但范围可以不同,Z有时无法设置。除此之外,最好返回一个带有原因的字符串。

struct position {
int x;
int y;
int z;
};

int go_to_position(struct position *next_position)
{
/* Do stuff */
return (0);
};

但假设在某些情况下我只能更改 x 和 y。在其他情况下,只有 y 和 z。

我想知道实现它的最佳方法,以及是否有已知模式。

我会做这样的事情:

   #define PARAM_COUNT 3

enum { PARAM_X, PARAM_Y, PARAM_Y };

char*error_strings [PARAM_COUNT][PARAM_COUNT] = {
{"X don't work", Null , Null },
{Null, Null, "Z * Y cannot be larger than 10" },
{Null, "Z * Y cannot be larger than 10", Null },
};

char * check_position(struct position *position_to_check)
{
if( INTERNAL_CONSTRAINT(position_to_check->z, position_to_check->y)) {
return(error_strings[PARAM_Z][ PARAM_Y]);
}
if( INTERNAL_X_NOT_AVAILABLE() )
return(error_strings[PARAM_X][ PARAM_X]);
}
return (Null);
}

有更好的方法吗?有什么想法吗?

最佳答案

通常,您会有一些额外的 API 函数来检查底层功能。

例如,您可以实现如下所示的函数:

QueryCapabilities( CAPABILITIES_XYZ, &capa );

其中 capa 是一个包含有关 XZY 范围和可用性(或您需要的任何信息)的各种信息的结构。使用此 API 的更高级别只需检查功能,并根据需要进行调整或失败。

另一点是当给定不完美的参数时,您的 API 将执行的操作。一种常见的方法是“尽力而为”,您的 API 将根据提供的参数尽其所能。这可能包括忽略不受支持的参数和限制超出范围的值(如果最大 X 为 10,则 11 将设置为 10)。如果重要参数无效,您可能会使函数失败。另一种方法是一旦参数无效就失败,因为这表明上层程序在做无意义的事情。您还可以实现“尽力而为”,但在出现问题时返回警告值。

关于c - 运行时导出 C API 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28047459/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com