gpt4 book ai didi

c - 向 C 函数提供错误的参数类型时抛出错误/警告

转载 作者:行者123 更新时间:2023-12-02 18:54:25 24 4
gpt4 key购买 nike

我有这个代码:

#include <stdint.h>

void something(float a);

int main()
{
uint8_t a = 28;

something(a);

return 0;
}

void something(float a)
{

printf("%f\n", a);
}

我正在使用类似的函数将不同类型的变量记录到文件中,并且我想收到错误/警告消息,因为我使用错误的参数类型(uint8_t 代替)调用函数something float )。

我怎样才能实现这个目标?

最佳答案

老派的技巧是将函数更改为使用指针,因为 C 中的指针比整数和浮点具有更严格的类型规则。

#include <stdio.h>
#include <stdint.h>

void something(const float* a);

int main()
{
uint8_t a = 28;

/* gcc -std=c11 -pedantic-errors */
something(&a); // error: passing argument 1 of 'something' from incompatible pointer type
something(a); // error: passing argument 1 of 'something' makes pointer from integer without a cast

return 0;
}

void something(const float* a)
{
printf("%f\n", *a);
}

现代 C 版本:

#include <stdio.h>
#include <stdint.h>

void something_float (float a);

#define something(x) _Generic((x), float: something_float)(x)

int main()
{
uint8_t a = 28;

something(a); // error: '_Generic' selector of type 'unsigned char' is not compatible with any association

return 0;
}

void something_float (float a)
{
printf("%f\n", a);
}

关于c - 向 C 函数提供错误的参数类型时抛出错误/警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66352028/

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