Как оценивается этот оператор и как он называется?

#define FOO(val) \
({                                              \
   int b = val;                                 \
   printf("First, let's count to %d\n", val);   \
   for (int i = 1; i <= val; i++) {             \
      printf("%d...\n", i);                     \
   }                                            \
   b++;                                         \
   b;                                           \
})

int main() {
   int a = FOO(6);
   printf("a=%d\n", a);

   a = (4);     // straightforward, everyone should be familiar with this
   a = (4;);    // does not compile
   a = { 4; };  // does not compile
   a = ({ 4;}); // valid, a will equal 4


   return 0;
}

Я пытаюсь Обращаю внимание на приведенный выше пример. Как и почему работает макрос FOO (последний оператор действует как возвращаемое значение)? Что касается синтаксиса, как называются отдельные части и какие другие правила применяются?

9
задан Robᵩ 17 June 2011 в 16:10
поделиться