1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

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

Discussão em 'Programação' iniciada por The Dealer, 12 de Outubro de 2008. (Respostas: 16; Visualizações: 3295)

  1. The Dealer

    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: 13 de Outubro de 2008
  2. Baderous

    Baderous Banido

  3. sapropel

    sapropel Power Member

  4. AliFromCairo

    AliFromCairo Power Member

    Em inglês, tens o Unix Network Programming.
     
  5. raVemjr

    raVemjr I'm cool cuz I Fold

    Isso é capaz de me dar jeito a SO, apesar de ja ter o "Operating Systems" :D Thanks loads...
     
  6. dark_splinter

    dark_splinter Power Member

    É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.....
     
  7. The Dealer

    The Dealer Power Member

    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: 12 de Outubro de 2008
  8. dark_splinter

    dark_splinter Power Member

    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....)
    ;)
     
  9. The Dealer

    The Dealer Power Member

    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?
     
  10. dark_splinter

    dark_splinter Power Member

    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....
     
  11. The Dealer

    The Dealer Power Member

    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"...
     
  12. dark_splinter

    dark_splinter Power Member

    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...
     
  13. The Dealer

    The Dealer Power Member


    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 ?
     
  14. dark_splinter

    dark_splinter Power Member

    usa o dev-c++ ..... é o que custumo usar para C em windows....
     
  15. bsd

    bsd Power Member

    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.
     
  16. The Dealer

    The Dealer Power Member

    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.
     
  17. bsd

    bsd Power Member

    É 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.
     

Partilhar esta Página