簡體   English   中英

循環初始化語句中的未命名結構聲明

[英]Unnamed struct declaration inside for loop initialization statement

在其中一個SO線程中,我看到使用未命名的struct作為for循環中不同類型的多個變量的占位符:

例如:

for(struct {
      int i;
      double d;
      char c;
    } obj = { 1, 2.2, 'c' };
    obj.i < 10;
    ++obj.i)
{
  ...
}

這與g ++ 編譯很好
這是標准的C ++ 03語法嗎?

您可以在任何可以使用結構的地方使用未命名的結構 - 唯一的區別是它沒有獲得可以在其他地方使用的名稱。 你可以在任何可以使用類型的地方聲明一個新類型。 在大多數地方這樣做可能沒什么特別的意義,但這是另一回事。

除了非常特殊的情況,我不會完全推薦這個,但它是有效的。

下面的代碼適用於C ++(g ++ 5.4.0)。

http://rextester.com/ELWLF59792

//g++  5.4.0

#include <iostream>

#include <stdio.h>

int main()
{
      int i = 0;

      for(struct st{ int a[9]; }t;i<3;i++)
            printf("%d\n", t.a);
}

以下代碼適用於C(gcc 5.4.0)。

//gcc 5.4.0

#include <stdio.h>

int main()
{
      int i = 0;
      struct st{ int a[9]; }t;
      for(;i<3;i++)
            printf("%d\n", t.a);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM