Объявление переменной как статической в одном файле и объявление extern в другом файле - я думал, что это приведет к ошибке при связывании, поскольку переменная extern не будет видна ни в одном объекте, поскольку та, которая была объявлена в другом файле, была с квалификатором static . Но каким-то образом компоновщик (renesas) не показал никаких ошибок и создал исполняемый файл.
Если приведенный выше вариант использования был правильным, что произойдет, если две переменные будут объявлены как статические в двух разных файлах, а другая - в другом файле с объявлением extern? В этом случае 2 разных памяти будут созданы в 2 разных объектах, но какая из переменных будет связана с другой переменной, которая была объявлена как extern в другом файле (поскольку имена переменных одинаковы) ??
file1.c
static int test_var;
fn1()
{
test_var = 1;
}
file2.c
static int test_var;
fn2()
{
test_var = 2;
}
file3.c
extern int test_var;
fn3()
{
int x;
x = test_var;
}
test_var
объявленногоextern
и нет определения дляmain
. Мой компоновщик отмечает обе ошибки. Покажите полный пример. - person CB Bailey   schedule 15.12.2013