C 多个数据类型传递给同一个函数

标签 c function types bit-manipulation

我有这个函数采用 int* 作为参数并将其第 n 位更改为 1 或 0 :

void change_nth_bit(int *value, uint8_t bit, uint8_t n) {
    (*value) ^= (-bit ^ (*value)) & (1U << n);
}

我可以保证它会工作,因为值可以是类型:

  • *uint8_t
  • *字符
  • *uint16_t

或者我应该为每种数据类型创建一个函数?

最佳答案

您不能使用单个函数来实现此目的,您需要多个函数。

否则,访问(*value),它是指向uint8_t对象的整数指针,即

// This code is broken
unit8_t val = 0xC4;
change_nth_bit((int*)&val, 3, 1);
//             ^^^^^^
//               |
// Invalid ------+

会导致未定义的行为。

请注意,如果将此代码放入宏中(在用宏参数引用替换指针后),您应该能够实现所需的结果,而无需重复代码:

#define CHANGE_NTH_BIT(v,b,n) (v) ^= (-(b) ^ (v)) & (1U << (n))

关于C 多个数据类型传递给同一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46990753/

相关文章:

c - LTE 到 Wi-Fi 切换

MySQL:AVG 函数:为什么查询返回不正确的值?

c - 错误 'sscanf_result' 未声明(在此函数中首次使用)

scala - 检测传递给 Ints 列表上的 flatMap 的函数中的参数类型

swift - 为什么函数不被视为命名类型?

谁能解释为什么这个 fork 执行打印了我文本的 8 倍?

c - 如何在c编程中将函数打印到不同的文件中

C - 将结构指针与整数指针传递给函数

mysql - 如何编写 bash 函数来包装另一个命令?

c# - C# 中的高精度整数数学?