sizeof(char[34]); - legales C?



  • ich möchte wissen ob der Ausdruck

    sizeof(char[34]);
    

    legales C ist

    ist dem Compiler damit klar das ich die Größe eines char Arrays mit 24 einträgen wissen will?

    irgendwie komisch - habs aber unbewußt so eingetippt und es hat funktioniert 😉 - vielleicht hab ich mir da ja auch irgendwo abgeschaut - ist mir jedenfalls erst gerade aufgefallen



  • Ich frage mich gerade ernsthaft wo man ein solches Konstrukt benötigen könnte 😕



  • typedef struct
    {
    	unsigned char flags;								// SELECTED | DIRTY
    	char name[32];										//
    	char parentName[32];								//
    	float rotation[3];									// local reference matrix
    	float position[3];
    	unsigned short numKeyFramesRot;						//
    	unsigned short numKeyFramesTrans;					//
    	ms3d_keyframe_rot_t *keyFramesRot;					// local animation matrices
    	ms3d_keyframe_pos_t *keyFramesTrans;				// local animation matrices
    } ms3d_joint_t PACK_STRUCT;
    
    ...
    fread(&tmp->Jointbuffer[i].name, sizeof(char[32]), 1, FilePtr);
    fread(&tmp->Jointbuffer[i].parentName, sizeof(char[32]), 1, FilePtr);
    fread(&tmp->Jointbuffer[i].rotation, sizeof(float[3]), 1, FilePtr);
    fread(&tmp->Jointbuffer[i].position, sizeof(float[3]), 1, FilePtr);
    


  • Man macht es so:

    fread(&tmp->Jointbuffer[i].parentName, sizeof(char), 32, FilePtr); 
    fread(&tmp->Jointbuffer[i].rotation, sizeof(float), 3, FilePtr); 
    fread(&tmp->Jointbuffer[i].position, sizeof(float), 3, FilePtr);
    

    sizeof(char[3]) macht keinen Sinn.



  • kennt das wiedereinmal nur mein MS Compiler? 😉

    wie war das mit Sinn gemeint?
    a) es ist syntaktisch falsch
    b) es ist unschön



  • Vertexwahn schrieb:

    kennt das wiedereinmal nur mein MS Compiler? 😉

    wie war das mit Sinn gemeint?
    a) es ist syntaktisch falsch
    b) es ist unschön

    b) es ist unschön.



  • sizeof hat 2 Syntaxen(?):

    sizeof-expression:
    "sizeof" expression
    | "sizeof" "(" type ")"
    ;

    Da char[34] ein Typ ist, trifft die zweite Regel zu. Warum auch nicht, es wär ja ziemlich schwachsinnig vom Compiler, Zusatzaufwand zu treiben, nur um unsinnigen (aber nicht fehlerträchtigen) Code anzumeckern.


Anmelden zum Antworten