Why compiler in Visual Studio doesn't allow to pass argument int N[a][b], int M[b][a] to function? At the same time this technic are allowed in Linux?

This code works on Linux ( I use <https://ide.cs50.io> and I don't know which version of compiler there are). But it dosen't work in VS on Windows.
And I'm wondering why it is that? 
It says cannot allocate an array of constant size 0.

```
#include <stdio.h>
// I need to change it to N[4][5], int M[5][4] then it works in VS
void transposeMatrix(int a, int b, int N[a][b], int M[b][a]) 
{
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < b; j++)
            M[j][i] = N[i][j];
    }
}
int main(void)
{
    int a = 4, b = 5;

    int M[5][4] =
    {
        { 0, 10, 22, 30 },
        { 4, 50, 6, 77 },
        { 80, 9, 1000, 111 },
        { 12, 130, 14, 15 },
        { 16, 17, 102, 103 }

    };

    int N[4][5] =
    {
        { 1, 2, 3, 4, 5 },
        { 1, 2, 3, 4, 5 },
        { 1, 2, 3, 4, 5 },
        { 1, 2, 3, 4, 5 }
    };

    printf("array  M\n");
    for (int i = 0; i < b; i++) {
        for (int j = 0; j < a; j++)
            printf("%8i", M[i][j]);

        printf("\n");
    }

    transposeMatrix(a, b, N, M);

    printf("array  M\n");
    for (int i = 0; i < b; i++) {
        for (int j = 0; j < a; j++)
            printf("%8i", M[i][j]);

        printf("\n");
    }
    return 0;
}

```