Как компилятор отличает переменные,операторы и функции? Все ли компиляторы их отличают?

Сдавал учителю эту программу и он задал мне такие вопросы.Эта программа вычисления нормы вектора из n компонентов. Не могу понять к этой ли программе эти вопросы или просто абстрактно заданы.

#include <stdio.h>  
#include <math.h>  
#define N 100000  
double norm2(double a[],int n)  
{  
    int i=0; double summ=0,max,x;  
    for(i=0;i<n;i++)   
    scanf("%le",&a[i]);  
    max=fabs(a[0]);  
    for( i = 1; i < n; i++)   
        if (max < fabs(a[i])) max = fabs(a[i]);  
    for( i = 0; i < n; i++)  
    {  
        x = a[i]/max;  
        summ += x*x;  
    }  
    return max*sqrt(summ);  
    return 0;  
    }  
double norm2(double a[],int n);  
int main(void)  
{  
    double a[N]; int n;  
    scanf("%d",&n);  
   
    printf("Norma =%le",norm2(a,n));  
    return 0;  
}  

Ответы (1 шт):

Автор решения: Stan

Есть известные переменные/функции, есть не извесные. Обьявление функции и обьявление переменной (определение) имеет конкретную форму записи, по которой переменая/функция становится известной компилятору, в зависимости от формы записи он отличает переменную от функции (по наличию скобок например), при этом компилятор запоминает её имя. Когда уже известна - то он их отличает по имени.

→ Ссылка