Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C API设计问题-函数名和语义_C_Api - Fatal编程技术网

C API设计问题-函数名和语义

C API设计问题-函数名和语义,c,api,C,Api,我正在重新设计一个简单的C API接口来控制一个硬件 我有几个问题都与API有关。我不确定我是应该将他们全部分组在这个问题中还是提交多个问题。现在我将在这里列出它们 为了便于参考,API的结构如下所示 LIB_ERR_CODE myfunction1(int param1); 我的问题是: 是否更适合使用启用和禁用功能,或者使用带有bool参数的单个启用功能 LIB_ERR_CODE EnableOscillator(int device); LIB_ERR_CODE DisableOscil

我正在重新设计一个简单的C API接口来控制一个硬件

我有几个问题都与API有关。我不确定我是应该将他们全部分组在这个问题中还是提交多个问题。现在我将在这里列出它们

为了便于参考,API的结构如下所示

LIB_ERR_CODE myfunction1(int param1);
我的问题是:

  • 是否更适合使用启用和禁用功能,或者使用带有bool参数的单个启用功能

    LIB_ERR_CODE EnableOscillator(int device);
    LIB_ERR_CODE DisableOscillator(int device);
    
    vs

  • 我想统一命名方案。下面是一些使用术语的示例。首选术语是什么

    例1:

    LIB_ERR_CODE SetTemperature(int value);    // set temperature
    LIB_ERR_CODE GetTemperature(int *pvalue);  // returns actual temperature
    
    例2:

    LIB_ERR_CODE ProgramHumidity(int value); // set humidity
    LIB_ERR_CODE ReadHumidity(int *pvalue);  // returns actual humidity
    
    例3:

    LIB_ERR_CODE WriteConfiguration(int value);   // write values to a config register
    LIB_ERR_CODE ReadConfiguration(int *pvalue);  // reads values from the config register
    LIB_ERR_CODE CurrentConfiguration(int *pvalue); // Current configuration values
    
  • 这是一个我正在与之通信的硬件,因此有三个互补功能对我来说是有意义的。一个用于设置值的函数,一个用于读取设置值的函数,一个用于读取实际值的函数

  • 将一个硬件功能运行所需的两个函数调用组合在一起是否合乎逻辑?要设置振荡器,必须调用以下函数(顺序无关紧要)

    我觉得把它们结合起来会更有意义

    LIB_ERR_CODE ProgramOscillator(int freq, int amp);
    

  • 你会注意到接近票数的人:“主要基于意见”。有些语言有一些接近通用风格指南的东西——例如,大多数Java团队至少坚持资本化标准。有了C,就没有这回事了。您可以采用特定项目的样式指南(可能是GNU),但没有一种真正的方法。参考2:Setter和getter通常被命名为
    Set*()
    /
    Get*()
    。我个人更喜欢另一种方式,即
    *Set()
    /
    *Get()
    ,因为这样排序更精确…:-)关于第一个问题:自从痛苦的
    EnableWindow()
    ()大约25年前发明以来,不幸的是后者更为常见。对于第三个问题,我将提供所有三个,在前两个的基础上实现最后一个as包装器。无论如何,按照您认为最好的方式做,把所有内容都记录好。
    LIB_ERR_CODE ProgramFrequency(int freq);
    LIB_ERR_CODE ProgramAmplitude(int amp);
    
    LIB_ERR_CODE ProgramOscillator(int freq, int amp);