Quais recursos do C são influenciados por / derivados dos recursos do C ++? [fechadas]

8

Quais são os recursos do padrão C atual, que originalmente não faziam parte do C, mas foram inventados no / para C ++ e por causa de seus benefícios, foram posteriormente adotados no C?

Um exemplo proeminente é o comentário de linha única //, originalmente originário de C ++ e posteriormente adotado por C.

Você conhece mais recursos do C Standard, que explícita ou implicitamente vieram do desenvolvimento do C ++?

Info: Claro, eu sei que C ++ é derivado de C, mas eu estava pensando sobre quais recursos foram adotados a partir do desenvolvimento de seu derivado, C ++.

RobertS suporta Monica Cellio
fonte
4
O _Booltipo de C foi inspirado em C ++, boolacredito.
Jesper Juhl
2
Ser capaz de declarar variáveis ​​em outros locais além da parte superior de uma função também foi um C ++ primeiro, posteriormente adotado pelo think CI.
precisa
2
Eu acho que protótipos de funções vieram de C ++, IIRC.
Ian Abbott
2
Não permitir "int implícito" como um tipo de retorno de função (exceto main()) é (acho) também algo que o C ++ foi pioneiro e o C adotado posteriormente.
Jesper Juhl
5
Isso não parece ser uma pergunta com uma resposta clara e não há problema óbvio aqui.
Caleb

Respostas:

4

Não posso confirmar que eles foram definitivamente influenciados pelo C ++ diretamente 1 , mas aqui está uma lista de recursos no C ++ padrão que foram adicionados no C99:

  • comentários de linha única (como mencionado)
  • funções embutidas
  • variáveis ​​permitidas após o início do bloco
  • tipo de dados booleano
  • biblioteca matemática complexa

C11:

  • Uniões anônimas (C11 também permite estruturas anônimas). As uniões anônimas já estavam no C ++ padrão. (Estruturas anônimas ainda não são permitidas no C ++ padrão).

1 Por exemplo, BCPL, o predecessor de B, que por sua vez é o predecessor de C, já tinha a mesma sintaxe para comentários de linha única. Alguns deles podem ter sido suportados como extensões de idioma em alguma implementação C antes de serem incorporados ao C ++ padrão. Nesses casos, C padrão e C ++ padrão podem ter sido influenciados pela mesma fonte, em vez de influenciar um ao outro.

eerorika
fonte
1
@KonradRudolph Anonymous: union named { struct { int i;}; };Sem nome: union named { struct { int i;} unnamed; };. A estrutura sem nome é não tem nome, mas tem uma variável nomeada. Estrutura anônima não tem nome e não possui variável nomeada.
eerorika
1
@Konrad stackoverflow.com/a/14248127/560648
Lightness Races in Orbit
1
As funções embutidas existiam no GCC e em outros compiladores antes do C ++.
Lee Daniel Crocker
2

Os atributos foram adicionados no C ++ 11 e serão adicionados na próxima revisão do padrão C C2x . A proposta (e aqui ) para esse recurso faz referência específica ao C ++.

Os atributos podem ser úteis para fornecer informações que, por exemplo, ajudam o compilador a emitir melhores diagnósticos ou otimizar o código gerado. Fonte

Exemplo:

int [[attr1]] i [[attr2, attr3]];

[[attr4(arg1, arg2)]] if (cond)

{
    [[vendor::attr5]] return i;
}

Neste exemplo, " atributo attr1 aplica-se ao tipo de variável i, attr2 e attr3 se aplicam à própria variável, attr4 se aplica à instrução if e fornecedor :: attr5 se aplica à instrução de retorno. " Fonte

Adão
fonte
Interessante, mas "será adicionado" não é garantido.
chux - Reinstala Monica