1601Fermer1603
Kevin KoflerLe 30/09/2010 à 19:04
Folco (./1584) :
Han, j'aurais jamais dû regarde ce code bordel !!! sick
const char CfgFilename[] = "system\as";
=>
.LC0:
    .ascii "system\as\0"
    ...
    move.b .LC0,(%a4)
    move.b .LC0+1,83(%sp)
    move.b .LC0+2,84(%sp)
    move.b .LC0+3,85(%sp)
    move.b .LC0+4,86(%sp)
    move.b .LC0+5,87(%sp)
    move.b .LC0+6,88(%sp)
    move.b .LC0+7,89(%sp)
    move.b .LC0+8,90(%sp)
    move.b .LC0+9,91(%sp)

Mais que fait GCC ??? #vomi#

Utilise static const char CfgFilename[] = "system\as"; ou const char *CfgFilename = "system\as"; (la deuxième version étant préférée parce qu'elle permet l'unification avec les utilisations de "system\as" à d'autres endroits).

Maintenant, effectivement, l'implémentation de la recopie par GCC est aussi pourrie (on se demande à quoi sert lea!), mais le mieux reste de l'éviter entièrement.
Et sinon :
    const unsigned short PdtLibOffsets[] =
    {
        (unsigned long)&Data.InitCmdline        - (unsigned long)&Data,
        (unsigned long)&Data.ManageArgs         - (unsigned long)&Data,
        (unsigned long)&Data.GetCurrentArgPtr   - (unsigned long)&Data,
        (unsigned long)&Data.SkipArgs           - (unsigned long)&Data,
        (unsigned long)&Data.GetFilePtr         - (unsigned long)&Data,
        (unsigned long)&Data.CheckFileType      - (unsigned long)&Data
    };

typedef struct SFRAME
{
    void (*InitCmdline) (CMDLINE* CmdLine, int argc, const char** argv);
    int (*ManageArgs) (CMDLINE* CmdLine, void* Data, const char* OptList, int (*Callback)(void* Data, int Status),
                       void (*SwitchFunc)(void* Data, char Sign), ...);
    const char* (*GetCurrentArgPtr) (CMDLINE* CmdLine);
    void (*SkipArgs) (CMDLINE* CmdLine, int NumArgs);
    FILE* stderr;
    void (*printf) (const char* format, ...);
    short (*fprintf) (FILE *stream, const char* format, ...);
    int (*CheckFileType) (const char* Filename, unsigned char Type, const char* CustomType);
    void* (*GetFilePtr) (const char* Filename);

    LibRef* syslib;
    LibRef* pdtlib;
    CMDLINE Cmdline;
    long GlobalFlags;
    long FileFlags;
    long* CurrentFlags;
} SFRAME;

=>
PdtLibOffsets.5157:
    .word    0
    .word    4
    .word    8
    .word    12
    .word    32
    .word    28

Ca marche. tongue

Si c'est dans la même structure, oui. (La différence revient à un offsetof.) Mais du coup je ne vois pas trop l'intérêt par rapport à directement un tableau de pointeurs, pourquoi passer par un tableau d'offsets dans une structure de pointeurs?