Ciao a tutti, per un paio di anni ho studiato da autodidatta il linguaggio C poi per vari motivi l'anno scorso ho dovuto interrompere gli studi ma ho ripreso in questi giorni, purtroppo non sono mai riuscito a finire la scuola superiore quindi non ho avuto la possibilità di iscrivermi all'università e di conseguenza ho grosse lacune in materia; tralasciando questa piccola e triste premessa, vorrei avere informazioni su una porzione di codice che ho scritto, funziona ma purtroppo non riesco a capire bene qual'è il reale comportamento del programma.
Spero di riuscire ad avere informazioni da voi in merito perchè non conosco nessuno esperto che mi possa visionare il codice e quindi che possa aiutarmi.
#include <string.h>
#include <stdio.h>
#include <cpuid.h>
#include <limits.h>
int calcolaRatioDaFloat(float ratio_){
if (ratio_ <= 1.26){return 54;}
if (ratio_ <= 1.34 && ratio_ >= 1.25){return 43;}
if (ratio_ <= 1.51 && ratio_ >= 1.33){return 1610;}
if (ratio_ <= 1.61 && ratio_ >= 1.5){return 53;}
if (ratio_ <= 1.78 && ratio_ >= 1.66){return 169;}
if (ratio_ <= 1.89 && ratio_ >= 1.778){return 179;}
if (ratio_ <= 2.34 && ratio_ >= 1.88){return 219;}
};
struct ScreenStruct{
unsigned short width,heigth,refresh,ratio;
};
struct ScreenClass{
struct ScreenStruct(*new)(unsigned short w, unsigned short h, unsigned short r);
}ScreenStruct;
struct ScreenStruct new(unsigned short w, unsigned short h, unsigned short r){
float ratio= (float)w/(float)h;
//printf("ratio is %d\n", calcolaRatioDaFloat(ratio));
printf("%1.64f\n",ratio );
return
(struct ScreenStruct){
.width=w,
.heigth=h,
.refresh=r,
.ratio=calcolaRatioDaFloat(ratio)
};
}
struct ScreenClass ScreenStruct={.new=&new};
int main(int argc, char const *argv[])
{
printf("size of SCREENSTRUCTURE is %zu\n", sizeof(struct ScreenStruct));
int n=1;
struct ScreenStruct c[n];
c[n]=ScreenStruct.new(1920,1080,60);
printf("%d\n%d\n%d\n%d\n", c[n].width, c[n].heigth, c[n].refresh, c[n].ratio );
return 0;
}
principalmente stavo provando ad usare le strutture per creare delle classi, il problema che non sono riuscito a risolvere è che devo per forza definire, prima di compilare, la quantità di strutture mentre il mio obbiettivo è quello di riuscire a rendere questa quantità variabile in runtime magari impostando dei limiti, ma questo è comunque un altro discorso che vedrò più in là.
Quello che non comprendo è qual'è il reale comportamento di new in queste righe:
struct ScreenClass{
struct ScreenStruct(*new)(unsigned short w, unsigned short h, unsigned short r);
}ScreenStruct;
struct ScreenClass ScreenStruct={.new=&new};
scusate l'ignoranza, andrebbe bene anche solo avere delle informazioni sull'argomento o sapere se questa tecnica ha un nome così da poterla studiare più nel dettaglio.
PS: sò che conviene usare malloc per queste cose ma vorrei evitarlo per ora.