draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 8 janv. 2008 à 15:36
lol..
en effet j'avais jamais essayer d'assinger A et B a autre chose qu'un floppy mais on peu le faire, par contre tu ne les trouveras jamais ainsi par defaut c'est reserve pour les floppy.
Je corrigerai a l'occasion, d'ici la c'est juste une ligne a supprimer..
++
verdy_p
Messages postés202Date d'inscriptionvendredi 27 janvier 2006StatutMembreDernière intervention29 janvier 2019 8 janv. 2008 à 07:54
Le source indique que "A:" et "B:" ne peuvent pas être des partitions USB. C'est faux! Ma clé USB peut être reconnue si je veux avec une partition "A:", la clé étant alors bootable et se comportant alors comme un floppy USB. En dehors du boot, la même partition sur la clé est reconnnue comme une partition normale (dans ce cas elle apparait avec une lettre "D:" ou plus. Le partitionnement est modifiable dynamiquement (je peux en faire une disquette de n'importe quelle taille de 180Ko à 4Mo, la taille occupée dépendant uniqument de celle des fichiers que j'y stocke, la clé se chargeant d'émuler le système de fichier. Je peux même y mettre plusieurs "disquettes" et sélectionner laquelle sera reconnue au boot. Je peux aussi, en dehors du boot, décider de monter sous Windows une partition pour qu'elle soit reconnue comme un lecteur de disquettes avec une lettre quelconque: les logiciels qui veulent formater une disquette n'y voient que du feu, le pilote Windows émulant le BIOS floppy. Le pilote permet aussi d'échanger les lettres de lecteurs floppy si on a aussi un floppy classique, et il le fait de la même façon que lorsque le BIOS émule un lecteur B: quand on a un seul lecteur (il demande un changement de disquette dans le lecteur, et il suffit alors d'indiquer au pilote la partition à monter dans le pseudo-lecteur, cette partition pouvant être un lecteur floppy physique ou un fichier de partition sur la clé.
Accessoirement, le pilote compresse aussi les fichiers sur la clé pour en augmenter le débit, alors que la clé est déjà plus rapide qu'un floppy normal...
Très pratique cette clé pour un PC portable qui n'a aucun lecteur floppy.
La clé émule aussi un lecteur/graveur CD ou DVD (grace à son pilote compatible ATAPI)... Pratique pour tester une nouvelle compilation à graver: elle est reconnue sous NERO et IncD.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 5 janv. 2008 à 17:27
re,
Voila j'ai enlevé le lstrcat en suivant vos recommandations et j'ai mis un while a la place du goto...
++
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 3 janv. 2008 à 23:31
erf... c'est un peu un faux debat, tout depend de ce qu'on doit faire ou veux faire...
oui lstrcat est abusé, du au fait que je ne code en C que depuis meme pas un mois, je ne codais qu'en vb6 avant et que j'ai pas encore les bons reflexe en C.(et inutile de dire que je maitrise pas encore toute la synthaxe)
Dans mon cas, je code avant tout pour me faire plaisir, et pour apprendre, donc oui pour moi les remarques de BruNews et SAKingdom sont du pain beni! Et n'ayant pas de delai pour mes applis, ecrire deux lignes de plus ne me pose aucun soucis.
Apres si on est codeur dans une boite qui vous submerge de boulot et que plusieurs personnes vont devoir relire le code etc il est clair qu'on utilisera plutot des strcat et compagnie, mais avoue le, on ne parle plus de plaisir la!
Pour le while a la place du goto, wai en effet c'est plus joli
++
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 janv. 2008 à 23:25
A part que le .NET cohérent ne mène pas encore au chomage, le C "cohérent" à tout coup.
cs_Arnotic
Messages postés933Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention 9 janvier 2012 3 janv. 2008 à 23:06
.NET permet un code trés "lisible"et te donnera à peu près les mêmes performence que du C écrit "lisiblement". Il faut rester cohérent.
Pamaury
Messages postés341Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention17 juin 20083 3 janv. 2008 à 22:39
Il me semble que vous cherchez la petite bête, abuser ou pas, tel n'est pas la question. Pour moi, le plus important c'est la lisibilité et clairement (l)strcat est la solution la plus claire des trois proposée.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 janv. 2008 à 21:28
Oui mais, inline ou pas, utiliser strcat pour écrire 2 caractères au bout d'une chaine dont on connait déjà la taille initial est aussi abusé. On aurait pu, à la limite, remplacer par strcpy:
strcpy((chDrv+4), sDriveLetter);
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 janv. 2008 à 19:58
l'important à dire c'est qu'il n'y a aucun rapport entre un lstrcat (appel ddl) et strcat qui est macro donc aucun appel, code inline.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 janv. 2008 à 19:36
Aussi:
Enum:
...
if (dwDrvLst!=0)goto Enum;
pourrait être remplacé par un do while:
do {
...
} while(dwDrvLst);
Fera plus "propre" et plus "structuré" (quoi que reviendra au même une fois compilé).
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 janv. 2008 à 19:28
lstrcat pour copier 1 ou 2 caractères, c'est abuser.
Pamaury
Messages postés341Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention17 juin 20083 3 janv. 2008 à 19:24
Je vois pas en quoi utiliser lstrcat est abuser, si on raisonne comme çà on recode strcat, strcpy, memcpy, memcmp, memset, ... on en fini plus, autant utiliser les fonctions à notre disposition non ? çà coûte pas plus cher, à moins d'avoir une raison valable pour ne pas le faire.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 janv. 2008 à 19:16
bien fait !!!
voila vraiment ce que j'ai envie de dire quand je vois
char chDrv[5]; et autres variables de dimensions exotiques.
Des multiples de 4 minimum !!!
lstrcat ??? appel vers dll pour écrire au bout d'une chaine, tu abuses.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 3 janv. 2008 à 19:03
erf wai j'sais meme plus compter jusqu'a 6!
Mais bon pas tres cool de la part du compilo de laisser passer ce genre de trucs!
Merci pour l'info, je corrige ca des que j'ai une minute ;)
++
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 janv. 2008 à 18:14
Il y aura, en théorie, débordement tampon là. (en théorie car en pratique, le compilo reculera esp de 8 pour l'alignement.)
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 3 janv. 2008 à 17:51
mwai, mais bon, que ce soit ton main qui check les args ou ton pre-main qui te les envois c'est kif-kif, apres c'est une question de choix.
Sinon appart ca, y en a qui sont allé plus loin que mon main ? :p
++
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 janv. 2008 à 17:32
Si tu veux avoir plus propre, tu te fais une petite fonction inline qui traitera la ligne de commande et la retournera au format char **.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 janv. 2008 à 17:30
Plus propre peut-être mais surtout inutile.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 3 janv. 2008 à 17:27
Eh wai ok, quand je parlais de main par defaut je veux dire le main que l'on voit un peu partout...
Apres ok c'est pour le CRT, mais je comprends pas trop ce qui gene, a partir du moment ou on veut se passer du CRT il est un peu normal de se faire un "pré-main" aussi non ?
Bon ok comme je l'ai dis plus haut, ici c'est pas indispensable, mais imaginons que je veuille aussi un main genre:
int main( int argc, const char* argv[] )
C'est quand meme beaucoup plus propre de faire un "pre-main" que d'aller encombrer le Main avec des GetCommandLine et co...
++
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 janv. 2008 à 17:05
draluorg, il n'y a pas de main() "par défaut", il y a ceux prévus par le CRT sinon il y a un point d'entrée du prog (adresse où il commence), rien de plus.
Comme dit par SAK, si point d'entrée perso alors nenni params car personne n'est là pour en fournir.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 janv. 2008 à 17:00
Ce main est pour le CRT. Aucun argument ne sera envoyé dans un point d'entré spécifié par l'utilisateur et aucune valeur de retour ne sera attendu.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 3 janv. 2008 à 16:53
re,
heuuu quand tu as un main du genre:
int main( int argc, const char* argv[] )
C'est bien un main par defaut ca non ?
ils te viennent d'ou tes args ?
et le int il sert a quoi? a retourner l'ExitCode non ?
Ce sont des questions, pas des affirmations...
++
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 janv. 2008 à 16:47
"y a quand meme un code plus ou moins similaire derriere, qui va lancer votre main, puis faire un ExitProcess avec ce qu'a retourné votre main..."
Si tu utilises le CRT oui mais pas autrement.
BruNews >> Et bien, toutes optimisations pour la vitesse activent, aucun stackframe. Cependant, ajoute un tableau par exemple (+ appel de fonctions) et là, oui, c'est sûr, il y aura un stackframe.
Sinon, si c'est pour pratiquer son assembler, alors ok mais faudrait s'assurer que AppMain soit en __stdcall (ou autres). Pas très grave ici vu que cette fonction n'a pas de paramètres mais c'est une habitude à prendre.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 3 janv. 2008 à 15:07
re,
humm wai, en meme temps le main ici n'a rien avoir avec le code, c'est juste pour dire d'avoir un ptit proj pour tester...
Puis a mon avis quand vous utilisez un main par defaut y a quand meme un code plus ou moins similaire derriere, qui va lancer votre main, puis faire un ExitProcess avec ce qu'a retourné votre main...
++
Pamaury
Messages postés341Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention17 juin 20083 3 janv. 2008 à 11:49
Je vois pas l'intérêt de coder Main en assembleur, cela ne que compile que sur Visual C++ et c'est pas plus clair; bref on ne gagne absolument rien alors que le reste du code est intéressant.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 janv. 2008 à 11:10
Avec certainement une stackframe en plus.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 janv. 2008 à 00:40
Ah bon ?
Le compilateur ne génèrerait pas un code similaire si on codait la fonction en C (optimisation pour la vitesse active bien sûr) ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 janv. 2008 à 00:18
de Main() à AppMian() il n'y a qu'un call (push, mov et jmp en 1 instruction cpu) donc pas grave alors que sinon il coderait tout en asm vu que sans CRT.
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 3 janv. 2008 à 00:14
wai c'est vrai... mais ca permet d'avoir un AppMain moins encombré.
Enfin, dans ce cas ci c'est vrai que c'est dérisoire mais bon ca mange pas de pain non plus...
++
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 2 janv. 2008 à 23:38
Pourquoi appels tu AppMain via Main ?
Serait pas plus simple de faire de AppMain ton point d'entré ?
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 2 janv. 2008 à 22:27
Salut BruNews,
Erf wai j'ai oublier un ptit push...
Voila qui est corrigé, merci pour la remarque.
++
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 janv. 2008 à 21:52
call dword ptr ExitProcess
où est passé le param de ExitProcess ?
8 janv. 2008 à 15:36
en effet j'avais jamais essayer d'assinger A et B a autre chose qu'un floppy mais on peu le faire, par contre tu ne les trouveras jamais ainsi par defaut c'est reserve pour les floppy.
Je corrigerai a l'occasion, d'ici la c'est juste une ligne a supprimer..
++
8 janv. 2008 à 07:54
Accessoirement, le pilote compresse aussi les fichiers sur la clé pour en augmenter le débit, alors que la clé est déjà plus rapide qu'un floppy normal...
Très pratique cette clé pour un PC portable qui n'a aucun lecteur floppy.
La clé émule aussi un lecteur/graveur CD ou DVD (grace à son pilote compatible ATAPI)... Pratique pour tester une nouvelle compilation à graver: elle est reconnue sous NERO et IncD.
5 janv. 2008 à 17:27
Voila j'ai enlevé le lstrcat en suivant vos recommandations et j'ai mis un while a la place du goto...
++
3 janv. 2008 à 23:31
oui lstrcat est abusé, du au fait que je ne code en C que depuis meme pas un mois, je ne codais qu'en vb6 avant et que j'ai pas encore les bons reflexe en C.(et inutile de dire que je maitrise pas encore toute la synthaxe)
Dans mon cas, je code avant tout pour me faire plaisir, et pour apprendre, donc oui pour moi les remarques de BruNews et SAKingdom sont du pain beni! Et n'ayant pas de delai pour mes applis, ecrire deux lignes de plus ne me pose aucun soucis.
Apres si on est codeur dans une boite qui vous submerge de boulot et que plusieurs personnes vont devoir relire le code etc il est clair qu'on utilisera plutot des strcat et compagnie, mais avoue le, on ne parle plus de plaisir la!
Pour le while a la place du goto, wai en effet c'est plus joli
++
3 janv. 2008 à 23:25
3 janv. 2008 à 23:06
3 janv. 2008 à 22:39
3 janv. 2008 à 21:28
strcpy((chDrv+4), sDriveLetter);
3 janv. 2008 à 19:58
3 janv. 2008 à 19:36
Enum:
...
if (dwDrvLst!=0)goto Enum;
pourrait être remplacé par un do while:
do {
...
} while(dwDrvLst);
Fera plus "propre" et plus "structuré" (quoi que reviendra au même une fois compilé).
3 janv. 2008 à 19:28
On pourrait faire:
BOOL IsUsb(char sDriveLetter)
{
char chDrv[8]= "\\\\.\";
...
chDrv[4] = sDriveLetter; chDrv[5] = ':'; chDrv[6] = 0;
hDevice = CreateFileA(chDrv, ...);
...
}
3 janv. 2008 à 19:24
3 janv. 2008 à 19:16
voila vraiment ce que j'ai envie de dire quand je vois
char chDrv[5]; et autres variables de dimensions exotiques.
Des multiples de 4 minimum !!!
lstrcat ??? appel vers dll pour écrire au bout d'une chaine, tu abuses.
3 janv. 2008 à 19:03
Mais bon pas tres cool de la part du compilo de laisser passer ce genre de trucs!
Merci pour l'info, je corrige ca des que j'ai une minute ;)
++
3 janv. 2008 à 18:14
...
CreateFileA(lstrcatA(chDrv, sDriveLetter), ...);
Il y aura, en théorie, débordement tampon là. (en théorie car en pratique, le compilo reculera esp de 8 pour l'alignement.)
3 janv. 2008 à 17:51
Sinon appart ca, y en a qui sont allé plus loin que mon main ? :p
++
3 janv. 2008 à 17:32
3 janv. 2008 à 17:30
3 janv. 2008 à 17:27
Apres ok c'est pour le CRT, mais je comprends pas trop ce qui gene, a partir du moment ou on veut se passer du CRT il est un peu normal de se faire un "pré-main" aussi non ?
Bon ok comme je l'ai dis plus haut, ici c'est pas indispensable, mais imaginons que je veuille aussi un main genre:
int main( int argc, const char* argv[] )
C'est quand meme beaucoup plus propre de faire un "pre-main" que d'aller encombrer le Main avec des GetCommandLine et co...
++
3 janv. 2008 à 17:05
Comme dit par SAK, si point d'entrée perso alors nenni params car personne n'est là pour en fournir.
3 janv. 2008 à 17:00
3 janv. 2008 à 16:53
heuuu quand tu as un main du genre:
int main( int argc, const char* argv[] )
C'est bien un main par defaut ca non ?
ils te viennent d'ou tes args ?
et le int il sert a quoi? a retourner l'ExitCode non ?
Ce sont des questions, pas des affirmations...
++
3 janv. 2008 à 16:47
Si tu utilises le CRT oui mais pas autrement.
BruNews >> Et bien, toutes optimisations pour la vitesse activent, aucun stackframe. Cependant, ajoute un tableau par exemple (+ appel de fonctions) et là, oui, c'est sûr, il y aura un stackframe.
Sinon, si c'est pour pratiquer son assembler, alors ok mais faudrait s'assurer que AppMain soit en __stdcall (ou autres). Pas très grave ici vu que cette fonction n'a pas de paramètres mais c'est une habitude à prendre.
3 janv. 2008 à 15:07
humm wai, en meme temps le main ici n'a rien avoir avec le code, c'est juste pour dire d'avoir un ptit proj pour tester...
Puis a mon avis quand vous utilisez un main par defaut y a quand meme un code plus ou moins similaire derriere, qui va lancer votre main, puis faire un ExitProcess avec ce qu'a retourné votre main...
++
3 janv. 2008 à 11:49
3 janv. 2008 à 11:10
3 janv. 2008 à 00:40
Le compilateur ne génèrerait pas un code similaire si on codait la fonction en C (optimisation pour la vitesse active bien sûr) ?
3 janv. 2008 à 00:18
3 janv. 2008 à 00:14
Enfin, dans ce cas ci c'est vrai que c'est dérisoire mais bon ca mange pas de pain non plus...
++
2 janv. 2008 à 23:38
Serait pas plus simple de faire de AppMain ton point d'entré ?
2 janv. 2008 à 22:27
Erf wai j'ai oublier un ptit push...
Voila qui est corrigé, merci pour la remarque.
++
2 janv. 2008 à 21:52
où est passé le param de ExitProcess ?