O que eu não gosto em C e C ++

Não leia para programadores profissionais de C / C ++).

No artigo, eu expresso meu ponto de vista, se você não concorda, justifique nos comentários.
O objetivo deste artigo: apontar as desvantagens de C e C ++ de que realmente não gosto e incentivá-lo a usar a nova versão da linguagem ou talvez até oferecer algumas idéias para melhorar o padrão.

Bem, é hora de reacender o holivar.

Acho que todo mundo está ciente de que em C ++ existem linhas terríveis. Especialmente se estamos falando sobre o tipo antigo, muito foi corrigido e aprimorado na nova string, mas ainda não há suporte a unicode (!).

No padrão C ++ 20, é como digitar cadeias unicode.

C ++ 20! E isso apesar do C ++ existir desde 1983 .

Abra seu IDE favorito e tente compilar o seguinte código:

#include <iostream> #include <cstdio> int main() { char string [256]; std::cout << ": "; gets(string); std::cout << ": " << string; return 0; } 

UPD1: o comentarista diz que krakozyabry apenas no Windows. Com certeza, esqueci de escrever sobre isso.
Mas ainda desagradável.

Compilei no Dev Cpp, o compilador GCC.

Compile e veja:



Boa saída de tela, hein?

Agora vamos substituir char string [256] por char * string.

Não estou dizendo que isso deve funcionar, mas o compilador deve ter lançado o erro o mais alto possível.

Temos um programa de trabalho que foi interrompido.
Seria melhor se o compilador gerar um erro.
E a coisa toda é que o compilador não apenas o compilou, ele ainda não
avisos emitidos.

Aqui está outra piada:

 #include <iostream> using namespace std; int main(){ int arr[100]={}; cout<<arr[101]<<endl; return 0; } 

O que esperamos? O compilador nos dirá que você não pode acessar 101 elementos da matriz, pois existem apenas 100. Mas compilamos, executamos e visualizamos ... 32765 (pelo menos no meu hardware).

Hmm.

Agora vamos testar este código:

 int i = 5; i = ++i + ++i; std::cout<<i; 

O que você acha que ele trará?

A resposta correta depende do compilador.

No GCC, serão 14, mas dependendo dos sinalizadores de otimização.

E em outro compilador, pode ser facilmente 12 ...

Acho que todo mundo sabe que em C e nos benefícios há um monte de açúcar sintático, o que está longe de ser sempre necessário.

Por exemplo std::cout<<4["string"]; este é um código válido
Ele imprime n, assim como std::cout<<"string"[4];

Ótimo, hein?

E agora sobre o paciente.
C ++ e a rede.
Estes são 2 conceitos muito pouco correspondentes.
Apenas tente baixar a imagem do gato do seu site favorito usando a biblioteca C ++ padrão.
Isso não foi possível antes da adoção do padrão C ++ 17.
Você não pode trabalhar com JSON na mesma biblioteca padrão.
Ótimo comentário sobre isso.
Em geral, trabalhar com JSON em C ++ é semelhante a um pesadelo.
Fonte
Você acha que a condição sempre será falsa?

 if(sizeof ('a') != sizeof (char)){ //do something } 

Não, você está enganado.

Se você o compilar como um projeto C ++, é provável que a condição não seja atendida.
Não deveria. [1]
E se como um projeto C, nesse caso sizeof ('a') == sizeof (int).
Essas são as coisas.
[1] Em geral, muitos compiladores C e C ++ diferentes também são um problema.
Como muitas soluções não são padronizadas e elas funcionarão apenas em determinados compiladores.

Por exemplo, números de 128 bits em C ++. Existe o tipo __int128 no gcc e no clang, enquanto não está no Visual Studio porque não é um padrão. Ou, por exemplo, seqüências de caracteres no Visual Studio.

 String^ MyString3 = "Hello, world!"; //   GCC 

Ou, por exemplo, no velho Borland C ++ Builder, você pode codificar escrito em Object Pascal.
E há muitos desses momentos.

Uma dor particular é a falta de uma lista de pacotes C e C ++.

O que se segue disso? Use a nova versão do C ++, por exemplo, o C ++ 17 e alguns problemas serão resolvidos.

Devo dizer que no concorrente mais próximo C ++ - Rust não há muitos dos problemas desta lista, por exemplo, há uma carga maravilhosa, mas é claro que também é imperfeita.

E que problemas de C e C ++ você conhece?
Escreva nos comentários.

UPD: parece que muitas pessoas não entenderam meu artigo:
De maneira alguma eu quero criticar o C / C ++ e dizer escrever sobre isso.
Apenas aponto as deficiências do C / C ++, porque eles conseguiram um pouco disso.

Tudo tem suas desvantagens, acabei de compartilhar meus pensamentos.
UPD2:

Nos comentários, muitos escrevem que as vespas funcionam dessa maneira e geralmente esses são os recursos. Vocês estão errados.
Crescem as mesmas evidências de que você pode criar uma linguagem de programação de sistema na qual não é tão fácil dar um tiro no pé.

Só que o C / C ++ está cheio de soluções herdadas que ninguém corrigirá, porque pode quebrar a compatibilidade com versões anteriores.

E sim, esta é a minha opinião, é subjetiva .

Se você não concorda - melhor comentar, em vez de estupidamente menos, porque a opinião de todos nós
subjetivamente.

Source: https://habr.com/ru/post/pt432488/


All Articles