gpt4 book ai didi

c++ - 使用 gcc 使用常量及其关联的修饰符

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:15:29 24 4
gpt4 key购买 nike

我不确定如何称呼这些标志,但我指的是:

#define TEST_DEF 50000U //<- the "U" here

如果您不熟悉用于描述问题的行话,Google 搜索是徒劳的。

我想做的是使用这些常量定义并确保该值仅具有特定长度,即 8 或 16 位。

我该如何做到这一点,它被称为什么?

最佳答案

对于整数,定义这些后缀的标准部分(ISO/IEC 9899:2011 — 又名 C2011 或 C11)是:

§6.4.4.1 Integer constants

定义整数后缀的地方:

integer-suffix:
    unsigned-suffix long-suffixopt
    unsigned-suffix long-long-suffix
    long-suffix unsigned-suffixopt
    long-long-suffix unsigned-suffixopt

unsigned-suffix: one of
    u U

long-suffix: one of
    l L

long-long-suffix: one of
    ll LL

float 对应的后缀是f , F , lL (对于 floatlong double )。

请注意,使用 l 是有悖常理的因为它很容易与 1 混淆, 因此限定符通常用大写字母书写。

如果您想创建给定大小的整数文字,那么执行此操作的工具由 <stdint.h> 标准化。 (在 C99 中添加)。

header (有条件地)定义固定大小的类型,例如 int8_tuint16_t .它还(无条件地)提供最小大小的类型,例如 int_least8_tuint_least16_t .如果它不能提供准确的类型(可能因为字的大小是 36 位,所以大小 9、18 和 36 都被处理),它仍然可以提供最少的类型。

它还提供了诸如INT8_C 之类的宏。这确保参数是 int_least8_t值(value)。

因此,您可以使用:

#include <stdint.h>

#define TEST_DEF UINT16_C(50000)

并且您保证该值至少为 16 位无符号整数,并且格式/限定正确。

§7.20.4 Macros for integer constants

¶1 The following function-like macros expand to integer constants suitable for initializing objects that have integer types corresponding to types defined in <stdint.h>. Each macro name corresponds to a similar type name in 7.20.1.2 or 7.20.1.5.

¶2 The argument in any instance of these macros shall be an unsuffixed integer constant (as defined in 6.4.4.1) with a value that does not exceed the limits for the corresponding type.

¶3 Each invocation of one of these macros shall expand to an integer constant expression suitable for use in #if preprocessing directives. The type of the expression shall have the same type as would an expression of the corresponding type converted according to the integer promotions. The value of the expression shall be that of the argument.

7.20.4.1 Macros for minimum-width integer constants

¶1 The macro INTN_C(value) shall expand to an integer constant expression corresponding to the type int_leastN_t. The macro UINTN_C(value) shall expand to an integer constant expression corresponding to the type uint_leastN_t. For example, if uint_least64_t is a name for the type unsigned long long int, then UINT64_C(0x123) might expand to the integer constant 0x123ULL.

关于c++ - 使用 gcc 使用常量及其关联的修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858417/

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