Language: C

#define D(i,a,b)for(int i=a;i>=b;--i)
f[2005],n,k,M=1e9+7;main(){scanf("%d%d",&n,&k);f[n+1]=1;D(i,n,n-k+1)D(j,n,1)f[j]=j>i?0:(f[j]+f[j+1])%M;D(i,n-k,2)(f[1]*=2)%=M;printf("%d\n",f[1]);}

Compiler output:
main.c:2:1: warning: data definition has no type or storage class
    2 | f[2005],n,k,M=1e9+7;main(){scanf("%d%d",&n,&k);f[n+1]=1;D(i,n,n-k+1)D(j,n,1)f[j]=j>i?0:(f[j]+f[j+1])%M;D(i,n-k,2)(f[1]*=2)%=M;printf("%d\n",f[1]);}
      | ^
main.c:2:1: error: type defaults to 'int' in declaration of 'f' [-Wimplicit-int]
main.c:2:9: error: type defaults to 'int' in declaration of 'n' [-Wimplicit-int]
    2 | f[2005],n,k,M=1e9+7;main(){scanf("%d%d",&n,&k);f[n+1]=1;D(i,n,n-k+1)D(j,n,1)f[j]=j>i?0:(f[j]+f[j+1])%M;D(i,n-k,2)(f[1]*=2)%=M;printf("%d\n",f[1]);}
      |         ^
main.c:2:11: error: type defaults to 'int' in declaration of 'k' [-Wimplicit-int]
    2 | f[2005],n,k,M=1e9+7;main(){scanf("%d%d",&n,&k);f[n+1]=1;D(i,n,n-k+1)D(j,n,1)f[j]=j>i?0:(f[j]+f[j+1])%M;D(i,n-k,2)(f[1]*=2)%=M;printf("%d\n",f[1]);}
      |           ^
main.c:2:13: error: type defaults to 'int' in declaration of 'M' [-Wimplicit-int]
    2 | f[2005],n,k,M=1e9+7;main(){scanf("%d%d",&n,&k);f[n+1]=1;D(i,n,n-k+1)D(j,n,1)f[j]=j>i?0:(f[j]+f[j+1])%M;D(i,n-k,2)(f[1]*=2)%=M;printf("%d\n",f[1]);}
      |             ^
main.c:2:21: error: return type defaults to 'int' [-Wimplicit-int]
    2 | f[2005],n,k,M=1e9+7;main(){scanf("%d%d",&n,&k);f[n+1]=1;D(i,n,n-k+1)D(j,n,1)f[j]=j>i?0:(f[j]+f[j+1])%M;D(i,n-k,2)(f[1]*=2)%=M;printf("%d\n",f[1]);}
      |                     ^~~~
main.c: In function 'main':
main.c:2:28: error: implicit declaration of function 'scanf' [-Wimplicit-function-declaration]
    2 | f[2005],n,k,M=1e9+7;main(){scanf("%d%d",&n,&k);f[n+1]=1;D(i,n,n-k+1)D(j,n,1)f[j]=j>i?0:(f[j]+f[j+1])%M;D(i,n-k,2)(f[1]*=2)%=M;printf("%d\n",f[1]);}
      |                            ^~~~~
main.c:1:1: note: include '<stdio.h>' or provide a declaration of 'scanf'
  +++ |+#include <stdio.h>
    1 | #define D(i,a,b)for(int i=a;i>=b;--i)
main.c:2:28: warning: incompatible implicit declaration of built-in function 'scanf' [-Wbuiltin-declaration-mismatch]
    2 | f[2005],n,k,M=1e9+7;main(){scanf("%d%d",&n,&k);f[n+1]=1;D(i,n,n-k+1)D(j,n,1)f[j]=j>i?0:(f[j]+f[j+1])%M;D(i,n-k,2)(f[1]*=2)%=M;printf("%d\n",f[1]);}
      |                            ^~~~~
main.c:2:28: note: include '<stdio.h>' or provide a declaration of 'scanf'
main.c:2:123: error: lvalue required as left operand of assignment
    2 | f[2005],n,k,M=1e9+7;main(){scanf("%d%d",&n,&k);f[n+1]=1;D(i,n,n-k+1)D(j,n,1)f[j]=j>i?0:(f[j]+f[j+1])%M;D(i,n-k,2)(f[1]*=2)%=M;printf("%d\n",f[1]);}
      |                                                                                                                           ^~
main.c:2:127: error: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
    2 | f[2005],n,k,M=1e9+7;main(){scanf("%d%d",&n,&k);f[n+1]=1;D(i,n,n-k+1)D(j,n,1)f[j]=j>i?0:(f[j]+f[j+1])%M;D(i,n-k,2)(f[1]*=2)%=M;printf("%d\n",f[1]);}
      |                                                                                                                               ^~~~~~
main.c:2:127: note: include '<stdio.h>' or provide a declaration of 'printf'
main.c:2:127: warning: incompatible implicit declaration of built-in function 'printf' [-Wbuiltin-declaration-mismatch]
main.c:2:127: note: include '<stdio.h>' or provide a declaration of 'printf'