Что означает такая инструкция в C++?

int main()
{
  int a[10] = { [0 ... 5] = 1,[6 ... 9] = 2 };

  return 0;
}

компилируется и возвращает код 0 после исполнения на MacOS, компилятор LLVM Clang, IDE Xcode


Ответы (1 шт):

Автор решения: AlexGlebe

Компилятор реализовал нестандартную возможность. Стандарт запрещает.

warning: ISO C forbids specifying range of elements to initialize [-Wpedantic]

Такое ( инициализация элементов с указанием индекса ) можно только в Си. В плюсах ещё не добавили.

arrayset.c :

int main()
{

  // здесь предупреждение
  int a[10] = { [0 ... 5] = 1,[6 ... 9] = 2 };

  // здесь чистый код без ошибок 
  int b[10] = { [0] = 1 ,[1]=1,[2]=1,[3]=1,[4]=1,[5] = 1,
    [6]=2,[7]=2,[8]=2,[9] = 2 };

  return 0;
}

arrayset.s :

    .file   "arrayset.c"
    .text
    .globl  main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    $1, -48(%rbp)
    movl    $1, -44(%rbp)
    movl    $1, -40(%rbp)
    movl    $1, -36(%rbp)
    movl    $1, -32(%rbp)
    movl    $1, -28(%rbp)
    movl    $2, -24(%rbp)
    movl    $2, -20(%rbp)
    movl    $2, -16(%rbp)
    movl    $2, -12(%rbp)
    movl    $1, -96(%rbp)
    movl    $1, -92(%rbp)
    movl    $1, -88(%rbp)
    movl    $1, -84(%rbp)
    movl    $1, -80(%rbp)
    movl    $1, -76(%rbp)
    movl    $2, -72(%rbp)
    movl    $2, -68(%rbp)
    movl    $2, -64(%rbp)
    movl    $2, -60(%rbp)
    movl    $0, %eax
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (SUSE Linux) 7.5.0"
    .section    .note.GNU-stack,"",@progbits
→ Ссылка