E' possibile definire in c una direttiva del tipo

codice:
#define NOME_MACRO nome_variabile_da_leggere_da_tastiera

int main(){
     scanf("%d",nome_variabile_da_leggere_da_tastiera
     int array[NOME_MACRO]

}
Praticamente ho provato un codice simile su linux
codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <time.h>
#define N n
int glob;

void* routine(void * arg){
    sleep(rand()%10+1);
    glob++;
    printf("\nglob = %d \n",glob);
    fflush(stdout);
    return (void *)0;

}

int main()
{
    register int i;
    int n;
    srand((unsigned int)time(NULL));
    printf("Inserisci il valore di n ");
    fflush(stdout);
    scanf("%d",&n);
    pthread_t tid[N];
    for(i=0;i<N;i++){
        pthread_create(&tid[i],NULL,routine,NULL);
    }
    for(i=0;i<N;i++){
        pthread_join(tid[i],NULL);
    }
    return 0;
}
Funziona !! com'è possibile?