Вам нужно просмотреть предварительно обработанную форму вашего кода в исходном файле slethoprod.c
. С GCC вы можете получить его с помощью gcc -C -E slethoprod.c > slethoprod.i
, а затем проверить (с помощью редактора или пейджера) этот файл slethoprod.i
.
Содержит такие вещи, как:
struct_t a; a.a = 33; struct_t b; b.a = 33;
, который, очевидно, является недопустимым кодом C (поскольку он имеет некоторое назначение вне какой-либо функции, в файле scope ; помните, что инициализация в объявлении не назначение ).
Возможно, вы захотите получить какое-то определение (с инициализацией), например
struct_t a = {33};
или даже (для удобства чтения) инициализация структуры как
struct_t b = {.a=33};
и вы можете сыграть в фантастический препроцессор трюки, чтобы получить это.
Просмотрите сайт C и / или изучите стандарт C11 n1570 , чтобы узнать больше о C. Прочитайте также документацию вашего компилятора (например, GCC * 1040). *) и вашего препроцессора (например, cpp ).
Кстати, я лично чувствую, что присвоение имени глобалу с таким же именем a
как некоторому полю в нем имеет плохой вкус (даже если это допустимо, поскольку имена полей и глобальные переменные имеют разные пространства имен ) , Для удобства чтения я рекомендую избегать этого.