Is # include bad practice?

eu acho que é universalmente aceito que #include <bits/stdc++.h> é uma prática ruim, em parte porque ele analisa e inclui todos cabeçalho padrão, que é quase sempre desnecessários (também não-portátil, mas que está além de meu ponto de vista). É ainda pior quando combinado com using namespace std; porque agora você tem uma tonelada de nomes comuns em seu espaço de nomes, como next.

No entanto, parece que #include <Windows.h> é principalmente considerado OK (é usado pela maioria dos programas Win32 que eu já vi) , mesmo que ele conceptualmente faz a mesma coisa que uma combinação de #include <bits/stdc++.h> + using namespace std;.

de acordo com Wikipédia:

janelas.h é um ficheiro de cabeçalho específico do Windows para as linguagens de programação C E C++ que contém declarações para todas as funções na API do Windows, Todas as macros comuns usadas pelos programadores do Windows, e todos os tipos de dados usados pelas várias funções e subsistemas. Define um grande número de funções específicas do Windows que podem ser utilizado em C.

Porque é que é assim? Não é possível incluir cabeçalhos específicos que usamos e não incluir <Windows.h>?

 6
Author: Remy Lebeau, 2020-05-20

2 answers

A documentação do Msdn diz-lhe explicitamente (a) em que ficheiro de cabeçalho é declarada uma função e (B) que ficheiro de cabeçalho é suposto incluir.

A maioria das funções diz-lhe para incluir windows.h, por exemplo SendMessage

Algumas funções, que foram adicionadas mais tarde ou têm casos de uso muito específicos, só estão disponíveis através de outros ficheiros de cabeçalho, por exemplo SetupDiEnumDeviceInfo.

Por isso, não, não é má prática seguir os seus conselhos. No Entanto, recomendo vivamente a desactivação de algumas partes antes de incluir através de macro, por exemplo
#define NOMINMAX
#include <Windows.h>

Porque caso contrário você vai ter uma min e uma max macro que irá interferir com std::min e std::max.

 6
Author: Timbo, 2020-05-20 19:40:02

bits/stdc++.h é um cabeçalho específico do compilador. Se você compilar seu código com um compilador diferente ele pode ou não existir. Não faz parte do padrão C++. É um atalho para o acesso à biblioteca padrão C++.

windows.h is an operating-system specific header. Se você está compilando para o Windows você precisa dele, e cada compilador que suporta o Windows ficará bem com ele. Ele não vem necessariamente com o compilador;ele vem com o Kit de desenvolvimento de Software Windows. Ele fornece acesso à API do Windows.

Você pode ser capaz de afinar suas diretrizes #include Sob O Windows, mas o Windows é uma confusão tal que, a menos que você realmente queira gastar tempo cavando nele, você está melhor apenas usando windows.h.

 1
Author: Pete Becker, 2020-05-21 12:54:13