Я хотел бы добавить индекс массива к литералу в точке определения, так как мне не нужен массив после этого начального доступа:

int func(int index) {
   return {1, 2, 3, 4, 5}[index];
}

Примечание: элементы массива сложнее, чем в этом примере. Также я опускаю пограничные проверки. Мне просто любопытно, допускает ли синтаксис C такую ​​конструкцию / ярлык.

Компиляция приведенного выше кода приводит к:

error: syntax error before `{' token

Python-эквивалент того, что я пытаюсь достичь на C:

def func(index):
    return [1,2,3,4,5][index]
1
Bernhard Wagner 23 Ноя 2020 в 18:12

2 ответа

Лучший ответ

Вы можете использовать так называемые составные литералы :

#include <stdio.h>
 
int main(void) {
    printf("%d\n", 
       (int[]){1,2,3,4,5}[2]);
    return 0;
}

См. Раздел проекта стандарта C 6.5.2.5 Составные литералы

3
Eugene Sh. 23 Ноя 2020 в 15:15

Сгенерированный машинный код в любом случае будет одинаковым.

int func(int index) {
   return (int[]){1, 2, 3, 4, 5}[index];
}

Лучшая, более читаемая версия:

int func(int index) {
   const int[] local = {1, 2, 3, 4, 5};
   return local[index];
}

См. Раздел проекта стандарта C 6.5.2.5 Составные литералы

1
Lundin 23 Ноя 2020 в 15:16
64971050