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 :

Déroulement d'un programme C++ et compréhension


Sujet :

C++

  1. #21
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par leternel Voir le message
    Pour le code, il faudrait le lire plus avant.
    les arguments de main sont deux variables (un nombre d'arguments, et les valeurs des dits arguments), qui permettent justement de lire les options.
    vu son nom, FHelpDescribeAndExit est une fonction qui affiche l'aide et quitte l'application si les options ne sont pas valide.
    C'est du code, donc certainement pas les parametres du compilateurs.

    Je pense qu'il faut que tu t'entraines un peu plus avant de te lancer dans ce code.
    Essaie d'écrire un programme jouet, tel qu'un jeu de "plus ou moins".
    Est ce que :

    int main (int argc, char *argv[]) et int main (int argc, char **argv) sont la même chose ? Car la première syntaxe semble plus courante...
    Sinon pour m' entrainer, je vais tenter une double boucle pour faire un programme qui me calcul le potentiel (problème des N corps) puisque c'est ce que fait le programme DirectComputation (mais de manière sans doute plus évolué car j'espère m' ensortir avec au max une page de code...) https://fr.wikipedia.org/wiki/Probl%...%C3%A0_N_corps

  2. #22
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    De manière plus concrète, est ce que quelqu'un pourrait me dire s'il arrive à faire fonctionner ce programme: http://scalfmm-public.gforge.inria.fr/doc/install.html avec CodeBlocks ? J'ai tout essayé (ça fait deux jours que je passe dessus sans y arriver.... )

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    J'ai essayé de le faire depuis mon ordi Perso (car me suis dit que peut être le PC fournit par le Labo pose problème).
    Je n'arrive meme pas à fire le ccmake correctement (un problème avec BLAS m dit le message console...)

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    stage/SCALFMM-1.3-56/build$ cmake ../ -G "CodeBlocks - Unix Makefiles"
    -- CXX  GNU
    -- SCALFMM_BUILD_DEBUG = ON
    -- SCALFMM_ATTACHE_SOURCE       = OFF
    -- CMAKE_CXX_COMPILER_ID STREQUAL  GNU
    -- A cache variable, namely BLAS_DIR, has been set to specify the install directory of BLAS
    -- Looking for BLAS -- mkl.h not found
    CMake Warning at CMakeModules/morse/ColorizeMessage.cmake:61 (_message):
      BLA_VENDOR has been set to All but blas libraries could not be found or
      check of symbols failed.
     
      Please indicate where to find blas libraries.  You have three options:
     
       - Option 1: Provide the installation directory of BLAS library with cmake option: -DBLAS_DIR=your/path/to/blas
       - Option 2: Provide the directory where to find BLAS libraries with cmake option: -DBLAS_LIBDIR=your/path/to/blas/libs
       - Option 3: Update your environment variable (Linux: LD_LIBRARY_PATH, Windows: LIB, Mac: DYLD_LIBRARY_PATH)
     
     
      To follow libraries detection more precisely you can activate a verbose
      mode with -DBLAS_VERBOSE=ON at cmake configure.
     
      You could also specify a BLAS vendor to look for by setting
      -DBLA_VENDOR=blas_vendor_name.
     
      List of possible BLAS vendor: Goto, ATLAS PhiPACK, CXML, DXML, SunPerf,
      SCSL, SGIMATH, IBMESSL, Intel10_32 (intel mkl v10 32 bit), Intel10_64lp
      (intel mkl v10 64 bit, lp thread model, lp64 model), Intel10_64lp_seq
      (intel mkl v10 64 bit, sequential code, lp64 model), Intel( older versions
      of mkl 32 and 64 bit), ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic
    Call Stack (most recent call first):
      CMakeModules/morse/find/FindBLAS.cmake:1048 (message)
      CMakeModules/morse/find/FindBLASEXT.cmake:61 (find_package)
      CMakeLists.txt:280 (find_package)
     
     
    -- A library with BLAS API not found. Please specify library location.
    -- BLAS sequential libraries stored in BLAS_SEQ_LIBRARIES
    -- Could NOT find BLAS (missing:  BLAS_SEQ_LIBRARIES BLAS_LIBRARY_DIRS) 
    -- A cache variable, namely BLAS_DIR, has been set to specify the install directory of BLAS
    -- Looking for BLAS -- mkl.h not found
    CMake Warning at CMakeModules/morse/ColorizeMessage.cmake:61 (_message):
      BLA_VENDOR has been set to All but blas libraries could not be found or
      check of symbols failed.
     
      Please indicate where to find blas libraries.  You have three options:
     
       - Option 1: Provide the installation directory of BLAS library with cmake option: -DBLAS_DIR=your/path/to/blas
       - Option 2: Provide the directory where to find BLAS libraries with cmake option: -DBLAS_LIBDIR=your/path/to/blas/libs
       - Option 3: Update your environment variable (Linux: LD_LIBRARY_PATH, Windows: LIB, Mac: DYLD_LIBRARY_PATH)
     
     
      To follow libraries detection more precisely you can activate a verbose
      mode with -DBLAS_VERBOSE=ON at cmake configure.
     
      You could also specify a BLAS vendor to look for by setting
      -DBLA_VENDOR=blas_vendor_name.
     
      List of possible BLAS vendor: Goto, ATLAS PhiPACK, CXML, DXML, SunPerf,
      SCSL, SGIMATH, IBMESSL, Intel10_32 (intel mkl v10 32 bit), Intel10_64lp
      (intel mkl v10 64 bit, lp thread model, lp64 model), Intel10_64lp_seq
      (intel mkl v10 64 bit, sequential code, lp64 model), Intel( older versions
      of mkl 32 and 64 bit), ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic
    Call Stack (most recent call first):
      CMakeModules/morse/find/FindBLAS.cmake:1048 (message)
      CMakeModules/morse/find/FindBLASEXT.cmake:61 (find_package)
      CMakeModules/morse/find/FindLAPACKEXT.cmake:53 (find_package)
      CMakeLists.txt:281 (find_package)
     
     
    -- A library with BLAS API not found. Please specify library location.
    -- BLAS sequential libraries stored in BLAS_SEQ_LIBRARIES
    -- Could NOT find BLAS (missing:  BLAS_SEQ_LIBRARIES BLAS_LIBRARY_DIRS) 
    -- A cache variable, namely LAPACK_DIR, has been set to specify the install directory of LAPACK
    -- A cache variable, namely BLAS_DIR, has been set to specify the install directory of BLAS
    -- Looking for BLAS -- mkl.h not found
    CMake Warning at CMakeModules/morse/ColorizeMessage.cmake:61 (_message):
      BLA_VENDOR has been set to All but blas libraries could not be found or
      check of symbols failed.
     
      Please indicate where to find blas libraries.  You have three options:
     
       - Option 1: Provide the installation directory of BLAS library with cmake option: -DBLAS_DIR=your/path/to/blas
       - Option 2: Provide the directory where to find BLAS libraries with cmake option: -DBLAS_LIBDIR=your/path/to/blas/libs
       - Option 3: Update your environment variable (Linux: LD_LIBRARY_PATH, Windows: LIB, Mac: DYLD_LIBRARY_PATH)
     
     
      To follow libraries detection more precisely you can activate a verbose
      mode with -DBLAS_VERBOSE=ON at cmake configure.
     
      You could also specify a BLAS vendor to look for by setting
      -DBLA_VENDOR=blas_vendor_name.
     
      List of possible BLAS vendor: Goto, ATLAS PhiPACK, CXML, DXML, SunPerf,
      SCSL, SGIMATH, IBMESSL, Intel10_32 (intel mkl v10 32 bit), Intel10_64lp
      (intel mkl v10 64 bit, lp thread model, lp64 model), Intel10_64lp_seq
      (intel mkl v10 64 bit, sequential code, lp64 model), Intel( older versions
      of mkl 32 and 64 bit), ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic
    Call Stack (most recent call first):
      CMakeModules/morse/find/FindBLAS.cmake:1048 (message)
      CMakeModules/morse/find/FindLAPACK.cmake:317 (find_package)
      CMakeModules/morse/find/FindLAPACKEXT.cmake:195 (find_package)
      CMakeLists.txt:281 (find_package)
     
     
    -- A library with BLAS API not found. Please specify library location.
    -- LAPACK requires BLAS
    CMake Warning at CMakeModules/morse/ColorizeMessage.cmake:61 (_message):
      BLA_VENDOR has been set to All but LAPACK libraries could not be found or
      check of symbols failed.
     
      Please indicate where to find LAPACK libraries.  You have three options:
     
       - Option 1: Provide the installation directory of LAPACK library with cmake option: -DLAPACK_DIR=your/path/to/lapack
       - Option 2: Provide the directory where to find BLAS libraries with cmake option: -DBLAS_LIBDIR=your/path/to/blas/libs
       - Option 3: Update your environment variable (Linux: LD_LIBRARY_PATH, Windows: LIB, Mac: DYLD_LIBRARY_PATH)
     
     
      To follow libraries detection more precisely you can activate a verbose
      mode with -DLAPACK_VERBOSE=ON at cmake configure.
     
      You could also specify a BLAS vendor to look for by setting
      -DBLA_VENDOR=blas_vendor_name.
     
      List of possible BLAS vendor: Goto, ATLAS PhiPACK, CXML, DXML, SunPerf,
      SCSL, SGIMATH, IBMESSL, Intel10_32 (intel mkl v10 32 bit), Intel10_64lp
      (intel mkl v10 64 bit, lp thread model, lp64 model), Intel10_64lp_seq
      (intel mkl v10 64 bit, sequential code, lp64 model), Intel( older versions
      of mkl 32 and 64 bit), ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic
    Call Stack (most recent call first):
      CMakeModules/morse/find/FindLAPACK.cmake:529 (message)
      CMakeModules/morse/find/FindLAPACKEXT.cmake:195 (find_package)
      CMakeLists.txt:281 (find_package)
     
     
    -- A library with LAPACK API not found. Please specify library location.
    -- LAPACK sequential libraries stored in LAPACK_SEQ_LIBRARIES
    -- Could NOT find LAPACK (missing:  LAPACK_SEQ_LIBRARIES LAPACK_LIBRARY_DIRS) 
    CMake Warning at CMakeModules/morse/ColorizeMessage.cmake:61 (_message):
      BLAS has not been found, SCALFMM will continue to compile but some
      applications will be disabled.
    Call Stack (most recent call first):
      CMakeLists.txt:295 (message)
     
     
    CMake Warning at CMakeModules/morse/ColorizeMessage.cmake:61 (_message):
      If you have BLAS set BLAS_LIBDIR, BLAS_INCDIR or BLAS_DIR (CMake variables
      using -D or environment variables).
    Call Stack (most recent call first):
      CMakeLists.txt:296 (message)
     
     
    --          SCALFMM_LIBRARIES          = 
    --          SCALFMM_INCLUDES          = 
    -- SCALFMM_USE_FFT       =  OFF
    -- CMAKE_SYSTEM:   Linux-3.13.0-32-generic  CMAKE_CXX_COMPILER_ID GNU  CMAKE_CXX_COMPILER 
    -- SCALFMM_USE_STARPU             = 
    -- SCALFMM_USE_SSE              = ON
    -- SSE_FLAGS -mtune=native -march=native  --  -fopenmp  
    -- SCALFMM_USE_AVX               = OFF
    -- SCALFMM_USE_AVX2               = OFF
    -- This needs MPI = /home/laurent/Bureau/stage/SCALFMM-1.3-56/Examples/./RotationMPIFMM.cpp
    -- This needs MPI = /home/laurent/Bureau/stage/SCALFMM-1.3-56/Examples/./ChebyshevInterpolationMPIFMM.cpp
    -- SCALFMM_BUILD_TESTS          = OFF
    -- SCALFMM_BUILD_UTESTS         = OFF
    -- SCALFMM_BINARY_DIR:           /home/laurent/Bureau/stage/SCALFMM-1.3-56/build
    -- CPACK_SOURCE_IGNORE_FILES = \\.git .DS_Store .*~ /*.aux /*.idx /*.log /*.out /*.toc /*.ilg scalfmm.pro* org.eclipse.core.resources.prefs .cproject .project /home/laurent/Bureau/stage/SCALFMM-1.3-56/build /home/laurent/Bureau/stage/SCALFMM-1.3-56/Utils/ Notes Deprecated /Build* /noDist/ /Bench ToRemove Olivier
    -- CPACK_SOURCE_PACKAGE_FILE_NAME = SCALFMM-1.3-
    -- SCALFMM_USE_MEM_STATS        = OFF
    -- SCALFMM_USE_LOG              = OFF
    -- SCALFMM_USE_ASSERT           = ON
    -- SCALFMM_USE_BLAS     =  ON
    -- SCALFMM_USE_FFT       =  OFF
    -- SCALFMM_USE_MKL      =  TODO
    -- CMAKE_CXX_FLAGS     =  -std=c++11 -fpic -Wall -m64 -funroll-loops -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wconversion -Wcast-qual -Wcast-align -Woverloaded-virtual -mtune=native -march=native -g  -fopenmp
    -- SCALFMM_CXX_FLAGS   =  -std=c++11 -fpic -Wall -m64 -funroll-loops -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wconversion -Wcast-qual -Wcast-align -Woverloaded-virtual -mtune=native -march=native
    -- SCALFMM_LIBRARIES   =  
    -- SCALFMM_INCLUDES    =  
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/laurent/Bureau/stage/SCALFMM-1.3-56/build
    Du cup le Make plante aussi:
    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
    laurent@Ellington:~/Bureau/stage/SCALFMM-1.3-56/build$ make
    [ 30%] Built target scalfmm
    Linking CXX executable Debug/ChebyshevInterpolationFMM
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::copy(unsigned int, double*, double*)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:204: undefined reference to `dcopy_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::copy(unsigned int, double*, unsigned int, double*, unsigned int)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:218: undefined reference to `dcopy_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::scal(unsigned int, double, double*)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:228: undefined reference to `dscal_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::scal(unsigned int, double, double*, unsigned int)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:238: undefined reference to `dscal_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::axpy(unsigned int, double, double const*, double*)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:268: undefined reference to `daxpy_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::gemv(unsigned int, unsigned int, double, double*, double*, double*)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:285: undefined reference to `dgemv_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::gemm(unsigned int, unsigned int, unsigned int, double, double*, unsigned int, double*, unsigned int, double*, unsigned int)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:352: undefined reference to `dgemm_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::gemtm(unsigned int, unsigned int, unsigned int, double, double*, unsigned int, double*, unsigned int, double*, unsigned int)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:382: undefined reference to `dgemm_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::gemmt(unsigned int, unsigned int, unsigned int, double, double*, unsigned int, double*, unsigned int, double*, unsigned int)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:423: undefined reference to `dgemm_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::gesvd(unsigned int, unsigned int, double*, double*, double*, unsigned int, unsigned int, double*)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:467: undefined reference to `dgesvd_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::scpr(unsigned int, double const*, double const*)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:523: undefined reference to `ddot_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::geqrf(unsigned int, unsigned int, double*, double*, unsigned int, double*)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:533: undefined reference to `dgeqrf_'
    CMakeFiles/ChebyshevInterpolationFMM.dir/ChebyshevInterpolationFMM.cpp.o: In function `FBlas::orgqr(unsigned int, unsigned int, double*, double*, unsigned int, double*)':
    /home/laurent/Bureau/stage/SCALFMM-1.3-56/Src/Utils/FBlas.hpp:575: undefined reference to `dorgqr_'
    collect2: error: ld returned 1 exit status
    make[2]: *** [Examples/Debug/ChebyshevInterpolationFMM] Error 1
    make[1]: *** [Examples/CMakeFiles/ChebyshevInterpolationFMM.dir/all] Error 2
    make: *** [all] Error 2

  4. #24
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 059
    Points : 12 095
    Points
    12 095
    Par défaut
    >int main (int argc, char *argv[]) et int main (int argc, char **argv) sont la même chose ?
    Oui

  5. #25
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Je ne m' en sors pas,( et ce serait ridicule que je passe mes deux mois à essayer de faire fonctionner le debuger dde codeBlocks...), tant pis je vais essayer gdb en ligne de commande ça semble le plus simple (au moins ca fonctionne) mais c'est rudement long de taper chaque variable!!

  6. #26
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut Dans le code!
    Bon je me lance: je mlettrai que les lignes de codes qui m'interessent avec en commentaire ce que valent les variables!

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int main(int argc, char ** argv){ /*argc: argcount=nombre arguments, plus grand que 1(vaut , et argv pointeursur tableau d'arguments vaut: (char **) 0x7fffffffe3d8
    */
    argv est censé être un pointeur sur un pointeur de char. Donc 0x7fffffffe3d8 est l' adresse d' un pointeur de char. Comment obtenir la valeure de cette adresse (que nous noterons valeur1) ? En gros une fois que j'aurai cette valeur 1 je suis censé en recommençant cette procédure pouvoir réobtenir l'adresse de la variable char puis enfin lire la valeur de char....

    Concrètement je ne vois pas le rapport avec un pointeur de pointeur de char (**char) et un tableau de pointeurs (*char[]).

    2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const std::string defaultFile(/*SCALFMMDataPath+*/"../Data/unitCubeXYZQ20k.fma"); /*
        variable de type string: $4 = {static npos = <optimized out>, 
      _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
        _M_p = 0x613a28 "../Data/unitCubeXYZQ20k.fma"}}
    */
    Je ne comprends pas grands chose, normalement ma variable est initialisée à : "../Data/unitCubeXYZQ20k.fma", pourtant j'ai toute une partoe qui sors de nulle part:
    {static npos = <optimized out>,
    _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
    _M_p = 0x613a28
    Qu'est ce que ça veut dire ?

    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     const std::string filenameIn(FParameters::getStr(argc,argv,FParameterDefinitions::InputFile.options,  defaultFile.c_str()));/*$5 = {static npos = <optimized out>, 
     nouvelle  variable qui vaut pareil! _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
        _M_p = 0x613a68 "../Data/unitCubeXYZQ20k.fma"}}
    */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (gdb) print filenameIn
    $5 = {static npos = <optimized out>, 
      _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
        _M_p = 0x613a68 "../Data/unitCubeXYZQ20k.fma"}}
    C'est bizarre j'obtiens exactement la même chose que pour defaultfile! D'ailleurs je ne pige pas la syntaxe:
    on fait appel à la méthode "getStr" de la classe FParameters et qui prend en argument les variables déclarées plus haut qui sont
    - argc et argv
    - inputFile.options qui est un membre de la classe FParameterDefinitions
    -defaultFile.c_str() qui est le retour de la méthode c_str de la classe String

  7. #27
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Mais qu'est-ce que tu fais?
    Si tu veux; tu peux éplucher tous les headers de la STL, tu iras plus vite Oo.

    Quel est ton objectif actuel?
    Si c'est pour comprendre le programme, ne passe pas par le debugger (GDB), vu ta connaissance du C++, ça ne t'aidera aucunement.

    Par rapport à ta question sur la différence entre int main( int argc, char ** argv ) et int main( int argc, int *argv[] ), à l'utilisation d'argv il n'y en a aucune.
    Par contre, si tu voulais utiliser une fonction foo( int values[] ) (tu remarqueras que j'ai enlevé un pointeur, pour simplifier), tu n'aurais pas le choix, il te faudrait lui donner un tableau déclaré ainsi: int tab[] = { /*... mes ptites valeurs séparées par des ',' ...*/ }; ou ainsi int tab[3] = { val1, val2, val3 };. Ceci dû tout simplement au fait que int values[] dit explicitement que la fonction attend un tableau d'int.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  8. #28
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Ou int * tab = new[N]{}; ou simplement un pointeur. T[] dans un prototype de fonction est l'équivalent d'un pointeur foo(T[]) == foo(T*). Contrairement à ce que laisse pensé la syntaxe, la fonction attend un pointeur. Si on veut un tableau c-style, c'est par référence et rien d'autre (foo(T (& /*tab*/)[N])).

    NOTE: gdb dispose de raccourcie: p pour print, n pour next, s pour step, etc. L'auto-complétion bash avec (double) tabulation. La possibilité de suivre les variables automatiquement et tout le préambule peut se faire en une ligne de commande avec l'option -ex.

  9. #29
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Mais qu'est-ce que tu fais?
    Si tu veux; tu peux éplucher tous les headers de la STL, tu iras plus vite Oo.

    Quel est ton objectif actuel?
    Si c'est pour comprendre le programme, ne passe pas par le debugger (GDB), vu ta connaissance du C++, ça ne t'aidera aucunement.

    Par rapport à ta question sur la différence entre int main( int argc, char ** argv ) et int main( int argc, int *argv[] ), à l'utilisation d'argv il n'y en a aucune.
    Par contre, si tu voulais utiliser une fonction foo( int values[] ) (tu remarqueras que j'ai enlevé un pointeur, pour simplifier), tu n'aurais pas le choix, il te faudrait lui donner un tableau déclaré ainsi: int tab[] = { /*... mes ptites valeurs séparées par des ',' ...*/ }; ou ainsi int tab[3] = { val1, val2, val3 };. Ceci dû tout simplement au fait que int values[] dit explicitement que la fonction attend un tableau d'int.
    On me demande de bien comprendre ce programme donc je l' épluche ça me semble normal (avec votre aide je vais tout comprendre...je forge ma connaissance par l' 'exemple en m' adaptant aux objectifs que l'on me demande)

  10. #30
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    4)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     FFmaGenericLoader<FReal> loader(filenameIn);
        //
    Ici je ne comprends pas le <>, ça ressemble à vector. Pourtant toutes les classes que j'utilise sont sans chevrons... Serais ce une sorte de classe dynamique ?
    - FFmaGenericLoader: nom de la classe
    - <FReal>: ??je ne sais pas
    -loader: nom de l'instance/objet
    - loader(filenameIn) : on initialise l' objet, c'est ici que l'on fait appel au constructeur

    Ps: la variable objet loader à la tête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    print loader
    $13 = {<FAbstractLoader<double>> = {
        _vptr.FAbstractLoader = 0x611cb0 <vtable for FFmaGenericLoader<double>+16>}, file = 0x613af0, binaryFile = false, centerOfBox = {data = {0,5, 0,5, 0,5}}, 
      boxWidth = 1, nbParticles = 20000, typeData = {8, 4}, tmpVal = 0x0, 
      otherDataToRead = 0}

  11. #31
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Presque, FFmaGenericLoader est une template de classe.
    Du coup, FFmaGenericLoader<FReal> est la classe de ce modèle où le premier argument template vaut FReal. Exactement comme vector.

    FReal est le nom donné à double un peu plus haut (par typedef double FReal). L'intérêt est de nommer ce type, et d'éviter la confusion avec d'autres valeurs qui seraient aussi des doubles.

    Ton analyse est quasiment bonne:
    c'est bien la construction d'une variable, mais le type précis est FFmaGenericLoader<FReal>.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  12. #32
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    5)

    Au sein de l'objet loader, lors de l'appel au constructeur*, on a l'instruction suivante::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     std::cout << "Open file "<< filename << std::endl;
            this->readHeader();

    Ce qui produit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Open file ../Data/unitCubeXYZQ20k.fma
     File open in ASCII mode 
       Datatype 8 4
       nbParticles: 20000
       Box width:   1
       Center:        (0.5, 0.5, 0.5)

    PS; *Constructeur:
    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
      FFmaGenericLoader(const std::string & filename) : file(nullptr),binaryFile(false),
                                                          centerOfBox(0.0,0.0,0.0),boxWidth(0.0),nbParticles(0),tmpVal(nullptr),otherDataToRead(0) {
            std::string ext(".bfma");
            // open particle file
            if(filename.find(ext) != std::string::npos) {
                binaryFile = true;
                this->file = new std::fstream (filename.c_str(),std::ifstream::in| std::ios::binary);
            }
            else if(filename.find(".fma")!=std::string::npos ) {
                this->file = new std::fstream(filename.c_str(),std::ifstream::in) ;
            }
            else  {
                std::cout << "Input file not allowed only .fma or .bfma extensions" <<std::endl;
                std::exit ( EXIT_FAILURE) ;
            }
            // test if open
            if(! this->file->is_open()){
                std::cerr << "File "<< filename<<" not opened! " <<std::endl;
                std::exit( EXIT_FAILURE);
            }
            std::cout << "Open file "<< filename << std::endl;
            this->readHeader();
        }

  13. #33
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Bon ça fait déjà pas mal de questions, si vous pouvez m'aider (en respécifiant le numéro de question) ce serait très simpas

  14. #34
    Membre à l'essai
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Points : 21
    Points
    21
    Par défaut
    Salut,

    je me suis souvent retrouvé dans ta situation, et mon premier réflexe a malheureusement été d'essayer d'utiliser un débogueur pour tracer le logiciel.
    C'est peut-être l'approche la plus pratiquée, mais, par expérience, je ne considère pas que ce soit la meilleure.
    Une meilleure approche consiste à articuler la compréhension d'un code autour de quatre piliers :
    1. le refactoring
    2. les tests
    3. la documentation
    4. le débogueur

    En tout premier lieu, consulte les éléments suivants s'ils existent :
    - la documentation (utilisateur, développeur, code, et tes collègues!)
    - les commentaires des fonctions, les noms des variables, les noms des fonctions
    - les tests unitaires et fonctionnels
    - un journal (log file), idéalement avec différents niveaux de verbosité.

    Tous ces éléments doivent t'aider à comprendre l'intention des développeurs du code.
    Malheureusement, en pratique, il n'est pas rare qu'un code soit mal écrit, peu testé et peu documenté; et le code parfait pour tous n'existe pas!
    Dans ce cas, utiliser un débogueur sera probablement très fastidieux, surtout si des variables temporaires sont passées en paramètre de tes fonctions.

    A ta place, je procéderais de la sorte :
    1. si besoin, j'écrirais une classe pour pouvoir écrire les différentes étapes du code dans un journal (avec un singleton, avec std::clog, avec std::wclog, ou tout autre chose qui te convienne mais qui soit accessible de partout)
    2. je remanierais le code : renommage de variables, de fonctions, découpage de fonctions en sous-fonctions, commentaires de code, stockage des variables temporaires passées en paramètre dans des vraies variables (pour faciliter l'utilisation des débogueurs)
    3. j'écrirais des tests d'apprentissage (idéalement dans un serveur d'intégration continue) : quand tu penses comprendre ce que fait une fonction, écris un test simple pour le vérifier (avec cppunit, google test, ctest, ou tout autre outil d'automatisation de tests)

    Ecrire de la documentation serait également une bonne chose, mais une fois que tu auras une bonne vision du logiciel.
    Quant au débogueur, c'est un outil qu'on utilise rarement quand on a des tests automatisés, et seulement pour corriger des bogues.

    Bon courage

  15. #35
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Il y a encore mieux! Demander à quelqu'un qui sait.
    Par exemple, celui qui t'a donné ce code à lire, ou celui qui l'a écrit.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  16. #36
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut Namespace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    namespace FParameterDefinitions {
     
    static const FParameterNames Help = {
        {"-help", "--help"} ,
         "To have print the options used by the application."
    };
    qu'est ce que le "static const " ? Je ne comprends pas bien cette ligne de code... Celà signifie t il que l'on a une variable Help, qui semble être une structure de type FParameterNames
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct FParameterNames {
        std::vector<const char*> options;
        const char* description;
    };
    De plus je ne comprends pas pourquoi on utilise des char* plutôt que des string! const char* description; est un pointeur sur un char, comment ça peut être une phrase entière ? Il faudrait plutôt un *char[] ie un pointeur sur un tableau de char.

  17. #37
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /** To print a list of parameters */
    inline void PrintUsedOptions(const std::vector<FParameterNames>& options){
        std::cout << ">> Here is the list of the parameters you can pass to this application :\n";
        for(const FParameterNames& option : options ){
            std::cout << ">> Descriptions : " << option.description << "\n";
            std::cout << "\t Params : ";
            for(const char* name : option.options ){
                std::cout << name << ", ";
            }
            std::cout << "\n";
        }
    }
    Qu est ce que ce mot clé: inline, je ne l'ai jamais vu!

  18. #38
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Petit HS:

    Mon dossier doicument est sur : /Network/Servers/ldap.ann.jussieu.fr/Volumes/DATA/users/thesards/pincemaille/Documents est ce que celà signifie que mon compte est sur un serveur distant ? (le ldap). Car j'ai parfois des messages d'erreurs qui je pensent surviennent du fait de ne pas être en local...

  19. #39
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut Doxygen
    [Est ce que ce site est généré par Doxygen ? http://scalfmm-public.gforge.inria.fr/doc/install.html. Car poyur bien comprendre la librairie le mieux est je penses de regaredr d'abord la documenttaion (comme vous me l'avez conseiller)] Résolu!!!

    Par contre je ne vois pas l'intérêt de générer sa propre documentation (avec make doc) si elle est disponible en ligne (mis à part avoir un accèes hors ligne...)

  20. #40
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    "In the scalfmm directory, you can locate several folders. The sources folder called Src, the examples/tests folder Tests, the unit tests folders UTests, the Addons folder which contains one sub-folder per addon, the doc directory where you can find some documentation and the data folder which contains particles files or any other data needed per the simulation examples.

    Here we focus mainly on the Tests and UTests folders, and we encourage users to look directly in the code file to see how things are made."
    Je ne capte pas trop la structure d'un logiciel:
    * sources: sans doute tous les fichiers .cpp,.h
    * examples: sans doutes des fichiers exemples faciles à utiliser directement
    * Test: ?? La je ne comprend spas l'intérêt? Peut être des fichiers qui testent si les fonctions réalisent bien ce qu'on leur demande mais je ne vois pas comment on peut le vérifier....
    *Utest ???
    * Addons ? je ne sais pas trop ce que ca signifie

Discussions similaires

  1. Contribuez à la FAQ et aux CODES SOURCE XML
    Par Community Management dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 21/04/2008, 21h52
  2. code source de netstat
    Par calif dans le forum Développement
    Réponses: 3
    Dernier message: 28/09/2003, 09h39
  3. Defragmenteur code-source
    Par ak-k dans le forum Windows
    Réponses: 7
    Dernier message: 25/08/2003, 15h36
  4. Je cherche le code-source d'un interface de Windows
    Par Robert A. dans le forum Windows
    Réponses: 5
    Dernier message: 02/06/2003, 10h45
  5. [VB6] Code source pour modifier MsgBox
    Par khany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/02/2003, 16h13

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