IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Commande FOR du preprocesseur???


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    zul
    zul est déconnecté
    Membre chevronné Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Par défaut
    Peut on réduire ce temps entre la tentative de connection et la réponse?
    Quelle méthode utilise tu pour scanner tes ports ? un connect sur le port pour voir si il est ouvert ?
    La "bonne" facon de scanner des ports tcp est d'envoyer un packet SYN, et d'analyser sa réponse ( SYN/ACK => OK le reste grosso modo pas ok). Voir l'implémentation dans nmap par exemple.

    Pourquoi reinventer la roue ? il existe deja un bon nombre de scanner de ports?

    [/quote]

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Citation Envoyé par zul
    Quelle méthode utilise tu pour scanner tes ports ? un connect sur le port pour voir si il est ouvert ?
    Oui.


    Citation Envoyé par zul
    La "bonne" facon de scanner des ports tcp est d'envoyer un packet SYN, et d'analyser sa réponse ( SYN/ACK => OK le reste grosso modo pas ok). Voir l'implémentation dans nmap par exemple.
    Merci de l'info! J'y connais rien mais je vais voir.
    Ce sera plus rapide?

    Citation Envoyé par zul
    Pourquoi reinventer la roue ? il existe deja un bon nombre de scanner de ports?
    C'est juste pour m'entrainer aux sockets.
    Je n'ai pas la prétention d'en faire un fonctionnel et efficace.

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par seriousme
    J'ai fait une petite macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define f(a) (liste_thread[a] = CreateThread ( NULL, 0, scan<a>, (LPVOID) parametre, 0, &dwThreadId ) )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    f(0);
    f(1);
    f(2);
    f(3);
    ...
    Ca marche mais ça oblige encore à taper f(base).
    Ca, ça s'appelle une boucle for...
    Ton scan<a> peut être réécrit correctement et tu n'auras pas de souci.
    Ensuite, Dev-c++ est un IDE, pas un compilo, c'est gcc derrière et il comprend très bien la méta programmation.

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Citation Envoyé par Miles
    Ca, ça s'appelle une boucle for...
    Si c'est ironique,c'est juste une solution que j'imagine mais que je n'utiliserait qu'en dernier recours!

    Pour le moment je cherche des tutos sur les commandes Boost.

    Citation Envoyé par Miles
    Ton scan<a> peut être réécrit correctement et tu n'auras pas de souci.
    C'est à dire? J'ai pas vraiment saisi.

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    JolyLoic:j'ai regardé en long,large et travers les pages mais je capte rien !

    Y aurais pas des sites francophones qui traite de ce sujet?

    Google me renvoie 100 pages pour "boost+preprocesseur" et aucune ne correspond vraiment!

    Je cherche avec "programmation preprocesseur+boucle" mais en vain pour l'instant!

    Merci d'avance

  6. #6
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (int i = 0; i < N_BASES; i++)
    	hd[i] = CreateThread(0, 0, scan, &i, 0, &Id);
    Qu'est-ce qui te pose problème dans le fait de n'avoir qu'une seule fonction scan()?

  7. #7
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Voila le prog:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <winsock2.h>
    #include <process.h>
    #include <winbase.h>
    //#include <stdafx.h>
    using namespace std;
     
    int resultat_scan[1000]={0};
     
    typedef struct tagTHREAD_PARAMS
    {
       int base;
     
    } THREAD_PARAMS, *LPTHREAD_PARAMS;
     
     
     
     
    DWORD WINAPI scan(LPVOID IpvThreadParam){
     
         LPTHREAD_PARAMS ThreadParam = reinterpret_cast<LPTHREAD_PARAMS>(IpvThreadParam);
     
         int flag;
     
         for(int i=ThreadParam->base;i<100;i+=10){
     
                                    WSADATA var_init;
                                    WSAStartup(MAKEWORD(2,2),&var_init);
     
                                    SOCKET sock;
                                    sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
     
                                    sockaddr_in connection;
                                    connection.sin_family=AF_INET;
                                    connection.sin_addr.s_addr=inet_addr("127.0.0.1");
                                    connection.sin_port=htons(i);
     
                                    if(connect(sock,(SOCKADDR*)&connection,sizeof(connection))!=SOCKET_ERROR){
                                                                                                                resultat_scan[i]=1;
                                                                                                                  }
                                    cout<<i<<endl;
                                    system("pause");
                                    WSACleanup();
                                    }
     
     
         return(0);
         }
     
     
     
     
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
     
        HANDLE liste_thread[10];
        DWORD dwThreadId ;
        DWORD dwThreadParam = 1 ;
     
        LPTHREAD_PARAMS parametre;
        parametre= (LPTHREAD_PARAMS) malloc(sizeof(THREAD_PARAMS));   
     
        for(int i=0;i<10;i++){
     
                              parametre->base=i;
                              liste_thread[i] = CreateThread ( NULL, 0, scan, (LPVOID) parametre, 0, &dwThreadId ) ;
        }
     
        WaitForMultipleObjects ( 10, liste_thread, TRUE, INFINITE) ;
        for(int i=0;i<10;i++){
                CloseHandle ( liste_thread [ i ] ) ;
                }
     
     
     
        /*for(int i=0;i<100;i++){
                if(t[i]){
                         cout<<"le port : "<<i<<" est occupe"<<endl;
                         }
        }*/
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Il n'est pas du tout optimisé,c'est juste un essai sur les threads.

    EDIT:Euh je précise que c'est celui qui exécute 10 thread qui font la même chose, ce n'est pas celui qui a été "bidouillé" avec des templates.

    EDIT:le coeur du probleme doit etre dans le for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=0;i<10;i++){
     
                              parametre->base=i;
                              liste_thread[i] = CreateThread ( NULL, 0, scan, (LPVOID) parametre, 0, &dwThreadId ) ;
        }

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Un exemple avec boost::preprocessor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <boost/preprocessor/repetition/repeat.hpp>
     
    #define MA_MACRO(z, n, data) f<n>();
     
    template <int i> int f() {return i;}
     
    int main();
    {
    	BOOST_PP_REPEAT(100, MA_MACRO, data)
    }
    Dans le code généré, on peut lire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template <int i> int f() {return i;}
     
    int main();
    {
    	f<0>(); f<1>(); f<2>(); f<3>(); f<4>(); f<5>(); f<6>(); f<7>(); f<8>(); f<9>(); f<10>(); f<11>(); f<12>(); f<13>(); f<14>(); f<15>(); f<16>(); f<17>(); f<18>(); f<19>(); f<20>(); f<21>(); f<22>(); f<23>(); f<24>(); f<25>(); f<26>(); f<27>(); f<28>(); f<29>(); f<30>(); f<31>(); f<32>(); f<33>(); f<34>(); f<35>(); f<36>(); f<37>(); f<38>(); f<39>(); f<40>(); f<41>(); f<42>(); f<43>(); f<44>(); f<45>(); f<46>(); f<47>(); f<48>(); f<49>(); f<50>(); f<51>(); f<52>(); f<53>(); f<54>(); f<55>(); f<56>(); f<57>(); f<58>(); f<59>(); f<60>(); f<61>(); f<62>(); f<63>(); f<64>(); f<65>(); f<66>(); f<67>(); f<68>(); f<69>(); f<70>(); f<71>(); f<72>(); f<73>(); f<74>(); f<75>(); f<76>(); f<77>(); f<78>(); f<79>(); f<80>(); f<81>(); f<82>(); f<83>(); f<84>(); f<85>(); f<86>(); f<87>(); f<88>(); f<89>(); f<90>(); f<91>(); f<92>(); f<93>(); f<94>(); f<95>(); f<96>(); f<97>(); f<98>(); f<99>();
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Merci beaucoup!

    Je teste dés que je peux...je vais en avoir doublement besoin car je fait un prog qui place des sockets "serveur" sur des ports de l'ordi
    et qui se mettent en écoute pour voir les tentatives de connections que je génére avec un autre prog "client".

    C'est surement inutile,la méthode est pourrie ... mais une fois encore c'est pour me faire la main sur les sockets et le multi-thread.

  10. #10
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define f(z, a, data)   (liste_thread[a] = CreateThread ( NULL, 0, scan<a>, (LPVOID) parametre, 0, &dwThreadId ) )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BOOST_PP_REPEAT(100, f, data) ;
    me renvoie l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    75 C:\DOCUME~1\PROPRI~1\Bureau\info\prog\c\prog\thread\main_scan_thread_2.cpp `(liste_thread[0] <unknown operator> CreateThread(0u, 0u, scan [with int base = 0], ((void*)parametre), 0u, (&dwThreadId)))' cannot be used as a function
    et c'est la seule de la compilation

  11. #11
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Et que donne le code à la sortie du préprocesseur (option /P avec Vc++).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Qu'est-ce que boost::preprocessor ? Une extension du préprocesseur lui-même, ou juste de la méta-programmation ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    JolyLoic:Je suis sous Dev-C++!

    Sinon a quoi correpondent le "z" et le "data" dans les arguments de f?

    Ils semblent obligatoire.

    PS:il ne reconnait pas le signe égal?

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Médinoc
    Qu'est-ce que boost::preprocessor ? Une extension du préprocesseur lui-même, ou juste de la méta-programmation ?
    juste de la méta-programmation, va voir sur boost.org

  15. #15
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    J'ai tenté avec VC++ mais il n'utilise pas les memes headers!

    J'ai donc déplacé ceux dont il avait besoin et il trouve des erreurs dedans,dans winbase.h en particulier.

    Quels sont les headers correspondants sous VC++?

    Merci.

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Si c'est un Visual C++ 6, oublie tout de suite.

  17. #17
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    C'est Visual C++ toolkit 2003.

    JolyLoic:cette fonction "for" ne serait t'elle pas valable que pour des fonctions et non des séquences d'instructions quelquonques?

    Finalement j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define f(z,a,data)   liste_thread[a]=CreateThread ( NULL, 0, scan<a>, (LPVOID) parametre, 0, &dwThreadId );
    et j'ai testé pour 50 analyses en parallele, c'est trés rapide...mais ne marche pas vraiment:pas de détection du port 80 qui est pourtant occupé!

    Mais ça doit plutôt être un probleme de socket...

    EDIT:non c'est moi qui est mal paramétré la boucle d'affichage des ports occupés

    Merci encore!

  18. #18
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Comment modifier les limites du BOOST_PP_REPEAT?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BOOST_PP_REPEAT(256, f, data) ;
    passe sans probleme.
    Mais:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BOOST_PP_REPEAT(257, f, data) ;
    ne compille pas et me renvoie l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    78 C:\Documents and Settings\Propriétaire\Bureau\main_scan_thread_a.cpp `f' undeclared (first use this function) 
    78 C:\Documents and Settings\Propriétaire\Bureau\main_scan_thread_a.cpp `data' undeclared (first use this function) 
    78 C:\Documents and Settings\Propriétaire\Bureau\main_scan_thread_a.cpp `BOOST_PP_REPEAT_1_257' undeclared (first use this function)
    78 est bien la ligne où se trouve l'instruction:BOOST_PP_REPEAT.

  19. #19
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Il faut truander :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <boost/preprocessor/repetition/repeat.hpp>
     
    #define MA_MACRO(z, n, data) f<n+data*10>();
    #define MY_BIG_MACRO(z, n, data) BOOST_PP_REPEAT(10, MA_MACRO, (n))
     
    template <int i> int f() {return i;}
     
    int main();
    {
    	BOOST_PP_REPEAT(30, MY_BIG_MACRO, data)
    }
    Mais on peut atteindre les limites du compilateur aussi.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  20. #20
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    J'avais plutôt pensé à mettre 2 BOOST_PP_REPEAT à la suite mais cette méthode est pas mal non plus.

    Merci du conseil.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. la commande for en shell
    Par fatnet dans le forum Administration système
    Réponses: 2
    Dernier message: 04/01/2009, 14h11
  2. La commande FOR en BATCH
    Par benkhdiri dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 15/12/2008, 13h36
  3. [Batch Dos] probleme commande for /F
    Par dob2806 dans le forum Scripts/Batch
    Réponses: 12
    Dernier message: 02/10/2008, 17h18
  4. commande FOR /F
    Par ouinih dans le forum Windows
    Réponses: 1
    Dernier message: 05/03/2008, 17h59
  5. Retour d'erreur avec l'utilisation de la commande For en VBS
    Par genialk2000 dans le forum VBScript
    Réponses: 3
    Dernier message: 30/03/2005, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo