livro para programar sockets em C e problemas em visual studio 2008

The Dealer

Power Member
Boas,

Alguem sabe de um bom livro em Portugues, sobre linguagem C com especificidade para Sockets?

EDIT: Desculpem ter mudado o titulo mas um off-topic acabou por se tornar num "topic" :)
 
Última edição:
Épa também já andei a procura .... mas eu era programar em windows ..... fiz umas pequenas cenas mas depois caguei naquilo n tive paciencia..... posso te dizer para pesquisares pelas seguintes bibliotecas caso queiras programar em windows sem ires para o .NET.....

#include <winsock2.h>


eu programei em visual c++ 2008 .... que já tras o SDK .... apesar que tens de fazer umas cenas para ficarem a funcionar os sockets.....
 
Épa também já andei a procura .... mas eu era programar em windows ..... fiz umas pequenas cenas mas depois caguei naquilo n tive paciencia..... posso te dizer para pesquisares pelas seguintes bibliotecas caso queiras programar em windows sem ires para o .NET.....

#include <winsock2.h>


eu programei em visual c++ 2008 .... que já tras o SDK .... apesar que tens de fazer umas cenas para ficarem a funcionar os sockets.....

só um pequeno off topic, qual é a diferença entre o visual c++ e o visual studio?

O primeiro permite a programação em C ou é especifico para c++?
 
Última edição:
só um pequeno off topic, qual é a diferença entre o visual c++ e o visual studio?

O primeiro permite a programação em C ou é especifico para c++?

Basicamente é o seguinte.... visual studio é um conjunto de IDES/compiladores que trás o visual c++, visual c#, visual basic, sql server, etc..... isto é um pacote com varios compiladores .... o visual c++ é apenas o visual c++ (o IDE da microsoft para programares em C++).....

Podes programar em C no visual C++ .... apesar que as vezes tens de compilar o programa em c++.... mas não faz nenhum diferença(ou quase nenhuma....)
;)
 
Basicamente é o seguinte.... visual studio é um conjunto de IDES/compiladores que trás o visual c++, visual c#, visual basic, sql server, etc..... isto é um pacote com varios compiladores .... o visual c++ é apenas o visual c++ (o IDE da microsoft para programares em C++).....

Podes programar em C no visual C++ .... apesar que as vezes tens de compilar o programa em c++.... mas não faz nenhum diferença(ou quase nenhuma....)
;)

Estou a abrir um projecto meu de C, no entanto ao fazer o build dá-me vários erros, por exemplo um que diz algo do género "default int is not supported by c++". Então mas dá ou não dá? O que estarei fazer mal?
 
Estou a abrir um projecto meu de C, no entanto ao fazer o build dá-me vários erros, por exemplo um que diz algo do género "default int is not supported by c++". Então mas dá ou não dá? O que estarei fazer mal?

N sei de cor quais são as diferenças sei que por exemplo não podes ter a main em void se não me engano e mais umas coisas.....

Se poderes mostra o codigo que tá a dar erro....
 
N sei de cor quais são as diferenças sei que por exemplo não podes ter a main em void se não me engano e mais umas coisas.....

Se poderes mostra o codigo que tá a dar erro....

Bem, não é bem no código que está a dar erro. É com certas instrucções. Nomeadamente, "free", "calloc" e "exit".

Estarei a abrir mal o projecto? Basicamente o que fiz foi: criar novo projecto de visual c++, abrir win32 console application, usei o main que já lá estava, e copiei colei todo o resto do código.. E dá esses erros de "identifier not found"...
 
Bem, não é bem no código que está a dar erro. É com certas instrucções. Nomeadamente, "free", "calloc" e "exit".

Estarei a abrir mal o projecto? Basicamente o que fiz foi: criar novo projecto de visual c++, abrir win32 console application, usei o main que já lá estava, e copiei colei todo o resto do código.. E dá esses erros de "identifier not found"...

O visual C++ é meio estupido.... já agora tá te a dar erro ou dar warnings????

é que normalmente nessas cenas da apenas warning... se for warning ignora....

é que por exemplo funções como scanf para não dar warning tem de ficar scanf_s....

mas se for warning... ignora apenas...
 
O visual C++ é meio estupido.... já agora tá te a dar erro ou dar warnings????

é que normalmente nessas cenas da apenas warning... se for warning ignora....

é que por exemplo funções como scanf para não dar warning tem de ficar scanf_s....

mas se for warning... ignora apenas...


nao, nao é warning. warning tenho um ou dois. é mesmo error... Mesmo assim, se há assim tantas diferenças, não existe um compilador do género para Windows ?
 
O erro que estás a ter ou é por falta de includes ou é por estares a tentar compilar código C (escrito em estilo pré-ANSI C) em modo C++.

Em C, se chamares uma função que não foi declarada, o compilador assume que ela devolve int.
Por outro lado, em C eu posso declarar uma variável assim:

Código:
 a; /* esta variável é inteiro */
abc(a, b) {
   /* esta função devolve inteiro e os dois argumentos a e b são inteiros. */
}
Isto são arcaísmos do tempo anterior ao ANSI C. No C++, pura e simplesmente não são admitidos.
Às vezes também acontece quando um gajo se engana no nome do tipo, por exemplo:

Código:
{
   doubl a; /* o compilador vai achar que doubl há de ser uma variável de tipo int, em C++ dá o erro do default int, e depois vai ficar sem saber o que fazer com o a. */
}
Quanto aos includes, há motivos para que não estejam bem. Na antiga tradição do UNIX, certas funções (em particular o calloc, o free) estavam em headers diferentes dos actuais (malloc.h?). O ANSI C, reorganizou as coisas, criou um header, stdlib.h, que não existia no UNIX, e onde foram parar coisas que estavam espalhadas. Alguns livros antigos e alguns autores que não se actualizaram ainda escrevem com os includes pré-ANSI C (já se passaram 20 anos).

Outro motivo ainda, é que se estás a compilar em modo C++, é possível que as funções calloc, free e as outras todas estejam definidas no namespace std (é aí que o padrão C++ as define). Por compatibilidade com a tradição, a maior parte dos compiladores segue a seguinte convenção:

Código:
#include <cstdlib>
...
// Código moderno C++
int* a = reinterpret_cast<int*>(std::calloc(10, sizeof(int)));
...
Código:
#include <stdlib.h>
...
// Código arcaizante C++
int* a = (int*) calloc(10, sizeof(int));
...
Já agora, não esquecer que em C++ um ponteiro para void não se converte automaticamente para um ponteiro de outro tipo sem cast.

Agora, é difícil ajudar-te sem pores o código que ofende o compilador. Em relação aos conselhos para mudar de compilador, a questão que eu ponho é: e quando tiveres no outro compilador um problema que não sabes resolver? trocas para um terceiro?

EDIT: Se é mesmo C que estás a usar, certifica-te de que o teu ficheiro tem extensão .c e não .cpp.
 
Em relação aos conselhos para mudar de compilador, a questão que eu ponho é: e quando tiveres no outro compilador um problema que não sabes resolver? trocas para um terceiro?
Bsd, eu não tenho qualquer duvida a programar em C, já que o faço à varios anos. A questão é, eu tenho dois problemas. O primeiro é, o facto de nunca ter usado C++ e desconhecer completamente a sua forma de utilização e as diferenças face ao C. Em relação a tua pergunta, a resposta é simples. Continuo a utilizar ambiente linux como sempre utilizei :)

Simplesmente gostaria de ter um compilador para ambiente Windows que me fizesse o mesmo, e ou os tempos mudaram, ou os programas pioraram. Porque já experimentei vários (dev, borland etc) nas ultimas horas e ou me dão erros que na minha ignorância simplesmente não entendo (deve ser de estar mal habituado à clareza do GCC), ou as imagens que eu estou a manipular saiem-me resultados completamente diferentes do que o esperado.
 
É que ora se está a falar aqui em C, ora em C++, é difícil entender. Eu já mudei para C++ há muitos anos (15?), se tiveres alguma dificuldade específica talvez te possa ajudar.

Para quem quer usar C++ como um "better C than C", a principal diferença é que há diversas conversões em que no C não é necessário cast e que em C++ é, regra geral o C++ é muito estrito com as conversões de tipos (enums e inteiros também são menos promíscuos). E como já disseram, o main é uma função que devolve inteiro, não pode ser void.

Em relação ao compilador, se queres C, não podes ter problemas com o Visual Studio. Se queres C++, durante um longo período o Visual C++ estava longe de implementar grande parte da linguagem (é uma linguagem muito mais complexa e difícil de compilar). Eu sofri durante este período, de 1994 a 2003, à espera que ele tivesse templates, depois especializações parciais de templates, etc, etc. No entanto, desde o Visual C++ 2005 (aliás desde a versão 13 do compilador) as coisas mudaram muito, e o VC++ compila todas as construções mais complicadas de C++.

Eu uso diariamente o G++ em UNIX, frequentemente o VC++, raramente o compilador da Intel em Linux. A geração de código no VC++ não tem nada a ver, mas o linker é o melhor dos três. O front end não é mau e consegue-se que ele compile mais ou menos C++ padrão. Recomendo.

O G++ é um dos melhores compiladores, mas também não é a lei. Se eu tenho que alterar coisas para compilar no VC++, também tenho que meter algumas coisas que deveriam ser desnecessárias para compilar no G++.

É um bom exercício do conhecimento da linguagem tal como definida no padrão compilar frequentemente em compiladores diferentes. Se tens algum erro específico, posta esse erro e o código ofensivo.
 
Back
Topo