“ long long”= “ long long int”= “ long int long”= “ int long long”?

我发现 long int longint long long都可以编译成变量类型。long int longint long longlong longlong long int之间有什么区别吗?

一般来说,如果 long的数目相同,类型是否相同?

1长:

long l;
int long il;
long int li;

2长:

long long ll;
int long long ill;
long int long lil;
long long int lli;

如果以上是正确的,下面的声明是否也是相同的?

long long* llp;
int long long* illp;
long int long* lilp;
long long int* llip;
11372 次浏览

是不是一模一样。

是的。

C + + 117.1.6.2/3

当允许多个 简单类型说明符时,它们可以自由地与其他 Decl 指定符混合在一起 任何命令。

根据 C + + 标准(7.1.6.2简单类型说明符)

3当允许使用多个简单类型说明符时,它们可以自由使用 以任意顺序与其他 decl 说明符混合。

例如,下面的声明是有效的

long static long const int x = 10;

您甚至可以使用 constexpr说明符以及 const限定符

constexpr long static long const int x = 10;

顺便说一下,我们忘记了说明符 signed! 让我们添加它,例如在声明符 x之前

constexpr long static long const int signed x = 10;

在 C 语言中,还可以在同一个声明说明符序列中使用多个类型限定符。根据 C 标准(6.7.3类型限定符)

5如果同一限定符在同一 说明符-限定符-列表,直接或通过一个或多个 typedef, 这种行为就好像它只出现过一次一样... ..。

因此,例如在 C 中,下面的声明也是有效的

const long const long static const int const signed x = 10;

所以如果你是根据程序中输入的符号数量来获得报酬的,那么我建议你使用这样的声明。:)

“ long long”= “ long long int”= “ long int long”= “ int long long”?

这里所有其他的答案都是关于你的问题的第二部分。第一部分: “ long long”= “ long long int”吗?,答案是 是的

C + + 117.1.6.2简单类型说明符(表10)

Specifier(s)            Type
...                     ...
long long int           “long long int”
long long               “long long int”
long int                “long int”
long                    “long int”
...                     ...

对于你的问题的第二部分: “ long int long”= “ int long long”吗?,答案是肯定的。

类型说明符 可以以任何顺序发生,并且可以混合和其他声明说明符

long long
long long int
long int long
int long long

是有效和等效的。

是的,但请 不要。正如英语和德语对形容词和副词有常规的语序(如时间-方式-地点) ,C 和 C + + 也是如此。与传统顺序不同不会使编译器感到困惑,但会使您的同事开发人员感到困惑。我认为传统的秩序大致上是沿着

  1. static/extern(连接)
  2. const/volatile(修订)
  3. signed/unsigned(签名)
  4. short/long(长度)
  5. 基本类型(头名词)

不过还是有回旋余地的。