Объявление локальных постоянных переменных анонимной структуры в C

#c #struct

#c #структура

Вопрос:

У меня есть следующий код:

 void fn(){
   struct{
     int a;
     int b;
     } s1, s2;
   s1.a = 1;
   s1.b = 2;
   s2.a = 1 << s1.a;
   s2.b = 1 << s2.b;
}
 

я пытался каким-то образом сделать переменные постоянными, но при попытке сделать это таким образом я получаю кучу ошибок компилятора:

 void fn(){
   const struct{
     int a;
     int b;
     } s1{.a = 1, .b = 2}, s2{.a = 1 << s1.a, .b = 1 << s1.b};
}
 
 main.c:7:10: error: expected ';' at end of declaration
     } s1{.a = 1, .b = 2}, s2{.a = 1 << s1.a, .b = 1 << s1.b};
         ^
         ;
1 error generated.
 

Вопрос:

существует ли решение проблемы объявления двух постоянных локальных переменных s1 и s2 одной и той же анонимной структуры с полями s2, определенными через поля s1?

Комментарии:

1. Это похоже на синтаксис C . В C вам нужны = промежуточные s1 и открывающие фигурные скобки. То же самое для s2 .

2. «Куча ошибок компилятора» не является допустимой ошибкой, пожалуйста, скопируйте и вставьте фактические сообщения об ошибках, которые вы получаете

Ответ №1:

Вы просто забыли = знаки.

 void fn(){
  const struct {
    int a;
    int b;
  } s1 = {
    .a = 1,
    .b = 2,
  }, s2 = {
    .a = 1 << s1.a,
    .b = 1 << s1.b,
  };
}
 

Комментарии:

1. Иногда самые простые вещи делают ваш день или портят его.