@polger

Почему не работает пример из книги «Язык программирования C» 6 издание Стивена Прата?

Вопрос про массивы переменной длины.

Вот пример из книги:
//vararr2d.c -- функции, использующие массивы переменной длины
#include <stdio.h>
#define ROWS 3
#define COLS 4
int sum2d(int rows, int cols, int ar[rows][cols]);
int main(void)
{
    int i, j;
    int rs = 3;
    int cs = 10;
    int junk[ROWS][COLS] = {
        {2,4,6,8},
        {3,5,7,9},
        {12,10,8,6}
    };

    int morejunk[ROWS-1][COLS+2] = {
        {20,30,40,50,60,70},
        {5,6,7,8,9,10}
    };

    int varr[rs][cs]; // массив переменной длины
    for (i = 0; i < rs; i++)
        for (j = 0; j < cs; j++)
            varr[i][j] = i * j + j;

    printf("Традиционный массив 3x5\n");
    printf("Сумма всех элементов = %d\n",
            sum2d(ROWS, COLS, junk));

    printf("Традиционный массив 2x6\n");
    printf("Сумма всех элементов = %d\n",
            sum2d(ROWS-1, COLS+2, morejunk));

    printf("Массив переменной длины 3x10\n");
    printf("Сумма всех элементов = %d\n",
            sum2d(rs, cs, varr));

    return 0;
}

// функция с параметром типа массива переменной длины
int sum2d(int rows, int cols, int ar[rows][cols])
{
    int r;
    int c;
    int tot = 0;
    for (r = 0; r < rows; r++)
        for (c = 0; c < cols; c++)
            tot += ar[r][c];

    return tot;
}


Использую последнюю Visual Studio.
1. Догадываюсь, что под массивы переменной длины надо выделять память в ручную. Это так?
2. Почему VS не согласна с этим кодом? В частности в прототипе int sum2d(int rows, int cols, int ar[rows][cols]); и определении функции int sum2d(int rows, int cols, int ar[rows][cols]) подчеркивает rows и cols?
3. Почему автор объявляет многомерный массив используя не константные значения в строке: int varr[rs][cs]; // массив переменной длины?
Все эти замечания это особенность компилятора от Microsoft или проблема в другом?
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
@pfemidi
Тут могло бы быть краткое описание меня
В Visual Studio это не пойдёт, VS не умеет C99.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
АМИКОН Москва
от 120 000 до 200 000 ₽
Almalence, Inc. Новосибирск
от 2 000 до 2 500 $
4Taps Mobile Тольятти
от 120 000 до 190 000 ₽
05 дек. 2020, в 11:24
100000 руб./за проект
05 дек. 2020, в 08:07
15000 руб./за проект
05 дек. 2020, в 03:51
11000 руб./за проект