Como exatamente o __attribute __ ((constructor)) funciona?

Parece bastante claro que é suposto para definir as coisas.

Quando exatamente isso funciona?Por que existem dois parênteses?É__attribute__ uma função? Uma macro? Sintaxe?Isso funciona em C? C ++?A função com a qual trabalha precisa ser estática?Quando é que__attribute__((destructor)) corre?

Exemplo em Objective-C:

__attribute__((constructor))
static void initialize_navigationBarImages() {
  navigationBarImages = [[NSMutableDictionary alloc] init];
}

__attribute__((destructor))
static void destroy_navigationBarImages() {
  [navigationBarImages release];
}

questionAnswers(5)

yourAnswerToTheQuestion