Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C]Compiltion et fonction

    8 février 2006 à 10:34:23

    Bonjour tout le monde,

    j'ai une petite question qui me turlupine depuis un bon moment, sur internet j'ai déjà souvent trouvé des codes source en C dont la fonction main était de type void :


    #include<stdio.h>
    ...
    void main(void)
    {

    }


    Je lance ma compilation et bien sûr devc++ n'aime pas beaucoup ^^
    "'main' must return 'int'"
    Alors évidement, j'essaye mettant un int main() et un return 0; seulement je me retrouve avec d'autres erreurs dû à certaines fonctions du programme.

    Donc comment faire compiler ce code?
    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2006 à 10:44:58

      Je doute que les autres erreurs soient dues à ce truc là.
      void main() c'est une manière non-valide de faire, ancienne, et à fuir absolument.


      Pour les autres erreurs, le plus simple serait de montrer tout le code.

      PS: si c'est un code récent qui contient un void main(), alors probablement le codeur n'est pas très bon (cela expliquerait aussi les autres erreurs).


      (edit : je tiens à faire remarquer que j'ai laissé un grand flou sur "l'ancienneté" de la chose, je me souviens en avoir déja discuté avec rz0 et il m'avait dit un truc ressemblant à son dernier message. Il a sûrement raison d'ailleurs)
      • Partager sur Facebook
      • Partager sur Twitter
        8 février 2006 à 10:48:05

        Oui le void est un type un peu batard, il s'emploie n'importe comment aujourd'hui, si on ne connais pas la différence entre un int, un char, un void, un static ou que sais je, hop on te balance un void...

        Pour le reste ca ne m'etonne pas que tu aies des erreurs, si deja le codeur met un void main(void) et que tu remplace par des int, c'est presque normal que tu trouves des erreurs ailleurs...
        • Partager sur Facebook
        • Partager sur Twitter
          8 février 2006 à 10:52:45

          A noter que ceux qui disent que void main est une forme "ancienne" disent n'importe quoi ; le C classic ne possédait pas de type void à la base donc... <_<
          • Partager sur Facebook
          • Partager sur Twitter
            8 février 2006 à 17:04:23

            Voici le code en question:

            #include <stdio.h>
            #include <conio.h>
            #include <winsock2.h>
            #pragma comment(lib, "ws2_32.lib")

            void main()
            {
                    WSADATA WSAData;
                    WSAStartup(MAKEWORD(2,0), &WSAData);

                    SOCKET sock;
                    SOCKADDR_IN sin;
                    char buffer[255];

                    sock = socket(AF_INET, SOCK_STREAM, 0);

                    sin.sin_addr.s_addr = inet_addr("127.0.0.1");
                    sin.sin_family      = AF_INET;
                    sin.sin_port        = htons(4444);

                    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
                    memset(buffer,0,255);
                    recv(sock, buffer, sizeof(buffer), 0);
                    printf("%s", buffer);
                    getch();
                    closesocket(sock);
                    WSACleanup();
            }


            Ceci est un programme qui illustre un cour sur les socket en C. Celui-ci est le programme du serveur qui réceptionne une phrase envoyé par le serveur lorque le client se connecte.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              8 février 2006 à 17:27:56

              C'est quoi les ereures de dev c++?
              (#pragma c'est comprit par devc++? Parce que sinon sa pourait être des ereures de linker)
              • Partager sur Facebook
              • Partager sur Twitter
                8 février 2006 à 18:00:26

                Voici les erreurs lorsque le programme est:
                #include <stdio.h>    // printf
                #include <conio.h>    // getch()
                #include <winsock2.h>
                #pragma comment(lib, "ws2_32.lib")

                int main()
                {
                        WSADATA WSAData;
                        WSAStartup(MAKEWORD(2,0), &WSAData);

                        SOCKET sock;
                        SOCKADDR_IN sin;
                        char buffer[255];

                        sock = socket(AF_INET, SOCK_STREAM, 0);

                        sin.sin_addr.s_addr = inet_addr("127.0.0.1");
                        sin.sin_family      = AF_INET;
                        sin.sin_port        = htons(4444);

                        connect(sock, (SOCKADDR *)&sin, sizeof(sin));
                        memset(buffer,0,255);
                        recv(sock, buffer, sizeof(buffer), 0);
                        printf("%s", buffer);
                        getch();
                        closesocket(sock);
                        WSACleanup();
                        return 0;
                }



                Image utilisateur
                • Partager sur Facebook
                • Partager sur Twitter
                  8 février 2006 à 18:02:51

                  euh #pragma comment n'est pas une directive spéciale Visual-C++. Il m'a semblé avoir vu sur codes sources que cette directive ne s'appliquait qu'à Visual-C++. Pour résoudre celà, il faut ajouter ta lib dans les options du projet je pense
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 février 2006 à 19:05:09

                    Essaye en remplacant tes déclarations par celles ci (c'est celle que j'utilise) :

                    int sock;
                    struct sockaddr_in sin;
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 février 2006 à 22:25:38

                      rien à faire >_<
                      En faite à la rigueur, vous n'auriez pas quelque exemple de programme simple sur les socket en C.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        9 février 2006 à 20:29:05

                        Tu a bien ajouter la libe .a? (A tu au moin un .a?)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [C]Compiltion et fonction

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown