#ifndef __GNUC__ me sufocar

Sep 04 2020

Esta questão pode ser totalmente estranha, atualmente estou trabalhando em algum código antigo (não meu). Na verdade, não sou um programador C, mas estou tentando entender o que essa parte do código realmente deve fazer. Felizmente, a parte estranha não é muito longa (parte de uma configuração):

int
main ()
{
#ifndef __GNUC__
       choke me
#endif

  ;
  return 0;
}

Se não é um compilador GNU, então "choke me"... o que isso choke mequer dizer ... Eu realmente não entendo. (e encontrei apenas coisas estranhas enquanto me engasgava no Google -.-)

Respostas

3 NateEldredge Sep 04 2020 at 09:36

É apenas suposto ser algo que não é válido em C e irá disparar um erro de sintaxe, impedindo a compilação do arquivo.

Presumivelmente, o programador não pretendia que o código funcionasse com qualquer compilador, exceto GNU C (gcc), então isso forçará a construção a falhar se qualquer outro compilador for usado. Não há nenhum significado especial para as palavras escolhidas, exceto que "me sufoque" provavelmente significava no sentido de "isso é algo que o compilador não pode 'engolir' e que o matará."

A abordagem mais moderna seria usar #error.

2 Someprogrammerdude Sep 04 2020 at 09:36

É uma declaração inválida, então resultaria em um erro.