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.
FonteVocê acha que a condição sempre será falsa?
if(sizeof ('a') != sizeof (char)){
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!";
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.