gpt4 book ai didi

c - 如果我在#define 中使用固定公式,它是否比使用数字效率低?

转载 作者:行者123 更新时间:2023-12-05 01:30:20 24 4
gpt4 key购买 nike

我正在研究 Cortex-M3 的一些遗留代码,这些代码是在 Keil µVision 上用 C 语言编写的。

在记录 ADC 值的函数中,比例因子用于将位转换回伏特。

我的问题围绕着头文件中定义的比例因子:

#define INPUT_VALUE_MAX (uint16_t)((1<<12)-1)

所以这等于 4095,这是有道理的,因为它是一个 12 位 ADC。我的问题是,将值“INPUT_VALUE_MAX”定义为公式是否意味着每次使用时,微 Controller 都必须重新计算该值。

简单地说,是:

#define INPUT_VALUE_MAX (uint16_t)((1<<12)-1)

需要比以下更多的处理时间:

#define INPUT_VALUE_MAX (uint16_t)4095

提前感谢任何人可以提供的帮助!

最佳答案

不,它不需要任何运行时处理时间。整个宏是一个整数常量表达式,这意味着它将在编译时计算。

如果您查看生成的程序集,您会发现该表达式被常量 4095 替换。


常量表达式在 C11 6.6 中是这样定义的:

A constant expression can be evaluated during translation rather thanruntime, and accordingly may be used in any place that a constant maybe.

Constraints

Constant expressions shall not contain assignment, increment, decrement, function-call, or comma operators, except when they are contained within a subexpression that is not evaluated.

Each constant expression shall evaluate to a constant that is in the range of representablevalues for its type.

/--/

An integer constant expression shall have integer type and shallonly have operands that are integer constants, enumeration constants,character constants, sizeof expressions whose results are integerconstants, _Alignof expressions, and floating constants that are theimmediate operands of casts. Cast operators in an integer constantexpression shall only convert arithmetic types to integer types,except as part of an operand to the sizeof or _Alignof operator.

关于c - 如果我在#define 中使用固定公式,它是否比使用数字效率低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43489902/

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