gpt4 book ai didi

c - 除了使用数字,我怎么能在 C 中创建一个常量

转载 作者:太空宇宙 更新时间:2023-11-04 05:20:40 26 4
gpt4 key购买 nike

我正在开发一个 C 数学库,它使用宏来完成大部分工作,我现在面临一个问题。

这是宏的样子:

the_macro(a, b, c)

宏本身会做类似的事情:(a - b > 0) ?错误函数:1

error_function 用于在编译时停止用户,因此如果 (a - b > 0)true,则宏将扩展为一个函数,它没有定义。所以这会导致链接错误。

一切似乎都很好,但今天我的老板告诉我我们需要做一些单元测试,所以我写了一个包装宏的函数:

int my_func(int a, int b, int c)
{
return the_macro(a, b, c);
}

问题来了,代码无法通过链接,因为如果我使用var而不是常量来调用the_macro,这些error_functions将在.o文件,因为int a, int b, int c都是运行时已知的,所以我只能调用常量宏函数:the_macro(2, 3, 4) 有什么办法可以避免这种情况吗?还是有更好的解决方案来对此宏进行单元测试?

编辑:

我正在处理的代码是 secret 的...但我举了一个例子来说明问题:

#include <stdio.h>

#define the_macro(a, b)\
(a > b)?error_function():1

// Comment out my_func(), then the program will run normaly
// But if you don't comment it out, the linkage error will come out.
void my_func(int a, int b)
{
the_macro(a, b);
}

int main()
{
printf("%d\n", the_macro(1, 10));
return 0;
}

我正在使用 gcc-4

最佳答案

无论您在何处使用宏,如果未声明 error_function,您都应该得到编译器错误。如果它已声明但未定义,则您有未定义的行为。宏的参数是否为常量在这方面没有任何改变。 (在未定义行为的情况下,它可能会影响实际行为。)

关于c - 除了使用数字,我怎么能在 C 中创建一个常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10944776/

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