foetus Posté(e) le 16 janvier 2013 Partager Posté(e) le 16 janvier 2013 (modifié) Parce que justement tu utilises un autre bash. il faut rajouter "#! /bin/sh" en première ligne Modifié le 16 janvier 2013 par foetus Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
BreizFenrir Posté(e) le 16 janvier 2013 Partager Posté(e) le 16 janvier 2013 Du coup j'enchaîne sur une question de bash (le printf c'est plus du C que du php pour moi ^^), pourquoi quand je mets un truc dans le genre :alias recompile="root=$(pwd); cd ~/Documents/Projet && make > /dev/null; cd $root" dans mon .bash_profile la variable root n'a pas l'air de vouloir se mettre à jour ) l'exécution ? (je me retrouve toujours dans le même dossier à la fin en fait, qqsoit l'endroit où j'exécute l'alias. En fait c'est très simple : le contenu de ton fichier .bash_profile est évalué lorsque tu te connectes à une nouvelle instance du shell. C'est à ce moment-là et pas après que $(pwd) est évalué, c'est pourquoi après exécution de ta commande tu n'es pas là où tu t'y attends. En fait, il suffit d'échapper le $ de la sous-commande à l'aide d'un antislash. Accessoirement, pour ton alias ici décrit, on peut même faire encore plus simple en utilisant la variable d'environnement $OLDPWD. Au final, ta commande deviendrait : alias recompile="cd ~/Documents/Projet && make > /dev/null; cd \$OLDPWD" Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xaelias Posté(e) le 16 janvier 2013 Partager Posté(e) le 16 janvier 2013 Nickel merci :-) J'ai encore appris des trucs en bash ^^ Merci à tous les deux pour vos réponses Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
fintch64 Posté(e) le 26 avril 2013 Partager Posté(e) le 26 avril 2013 Bonjour les gens ! Je profite de mon premier post ici pour vous demander votre avis sur Java. Avec encore une belle fournée de failles toutes plus critiques les unes que les autres, je me demande si on peut encore faire confiance aux implémentations de ce langage. Alors sans remettre sur le tapis les problèmes de sécurités sous-jacents (droits d'exécution administrateur (ou root), clic "un-peu-trop-rapide" sur "Ignorer cette alerte de sécurité", j'aimerais savoir si, selon vous, on peut encore avoir confiance en java pour développer des logiciels. Merci pour vos lumières Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kernelcoffee Posté(e) le 6 mai 2013 Partager Posté(e) le 6 mai 2013 Bonjour les gens ! Je profite de mon premier post ici pour vous demander votre avis sur Java. Avec encore une belle fournée de failles toutes plus critiques les unes que les autres, je me demande si on peut encore faire confiance aux implémentations de ce langage. Alors sans remettre sur le tapis les problèmes de sécurités sous-jacents (droits d'exécution administrateur (ou root), clic "un-peu-trop-rapide" sur "Ignorer cette alerte de sécurité", j'aimerais savoir si, selon vous, on peut encore avoir confiance en java pour développer des logiciels. Merci pour vos lumières Je n'ai pas d'avis particulier sur java, ça fait une plombe que je n'y ai pas touche. après je dirais que tout dépend de ce que tu veux faire, si l'applicatif est expose au public (genre site web / web service / applicatif réseau), perso non je ne m'y risquerais pas, puisque les failles de sécurité font presque partie de l'API a ce niveau la. si c'est sous contrôle avec seulement l'utilisateur au commande, ou en background avec un middleware qui n'est pas en java, je pense que ça passe. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 7 mai 2013 Partager Posté(e) le 7 mai 2013 Ouis mais Android = Java + Dalvik ou Android = C via JNI non documenté Alors oui JAVA a plein de problèmes, mais des fois il faut faire avec Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
fintch64 Posté(e) le 8 mai 2013 Partager Posté(e) le 8 mai 2013 Moué du coup, c'est plus à éviter qu'autre chose ... Mais pour une appli web je suis pas hyper fan de PHP ... c'est trop simple de faire des conneries avec :s (trop habitué aux langages fortement typés) Peut-être RoR ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kernelcoffee Posté(e) le 8 mai 2013 Partager Posté(e) le 8 mai 2013 Ruby est encore moins typé que PHP, mais a l'inverse est un vrai langage objet (et pas speudo-orienté objet comme PHP), et en combinaison avec rails te permet de faire des webapp équivalent a une webapp php en moins de ligne de code et de façon plus maintenable. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
fintch64 Posté(e) le 8 mai 2013 Partager Posté(e) le 8 mai 2013 Ca le concept objet, c'est assez important ! Ca avec le cloisonnement précis de l'espace de nommage, et pas un fourre-tout comme le fait PHP, où t'as parfois le malheur d'écraser une variable que t'as pas nommé correctement ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TheKillerOfComputer Posté(e) le 21 septembre 2013 Partager Posté(e) le 21 septembre 2013 Bon histoire de relancer le topic, commençons par un bon petit troll : J'ai lu par inadvertance ce post d'un topic récent et je ne peux m'empêcher de me demander : pourquoi un return dans un if, c'est moche ? Ça a pourtant le mérite d'éviter du traitement inutile si le résultat escompté était achevé plus tôt que prévu au sein de la fonction. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 21 septembre 2013 Partager Posté(e) le 21 septembre 2013 (modifié) Autant pour moi: C'est dans le else, parce que je mets des return dans des if (même beaucoup ) C'est parce que je suis assez strict: Après on peut me le reprocher Pour moi une fonction/ méthode doit avoir cette approche là: XXXX toto (....) {// Postconditionif ( someCondition1 ) return YYY;// Even more postconditionsif ( someCondition2 ) return ZZZ;....if ( someConditionN ) return UUU;// All logic here.....// Final returnreturn VVV;} Cela facilite la lecture, la maintenance (<- pincettes). Avis personnel: il faut éviter d'avoir des return sauvages. Ici, la fonction fait 3 lignes. Mais lorsque ta fonction/ méthode fait 25-30 lignes, il ne faut pas louper un return (surtout lors de la lecture du corps de la méthode/ fonction) Sinon surprise Niveau compilateur: peut être un rien en plus, mais je ne pense pas Pour revenir à la fonction "fautive", c'est parce qu'elle ne fait pas grand chose. Donc elle reste lisible (et le débat peut être long ) Déjà on peut la modifier avec mon approche. Mais cela ne change rien. Le plus gros changement, serait de mettre un return avec un test ternaire ((condition)? (true): (false)); En C, je ferai un #define parce qu'il n'y a pas d'allocations De façon extrême ( ), compter son occurrence dans le code et en fonction du nombre soit la supprimer la hardcoder trouver son équivalent. Parce que si je comprends bien le développeur a fait un "module" avec des fonctions plus ou moins officieuses qui lui manquait Modifié le 22 septembre 2013 par foetus Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
seboss666 Posté(e) le 21 septembre 2013 Partager Posté(e) le 21 septembre 2013 Certaines fonctions apparemment n'existaient pas lors de l'écriture du code, et le développeur a arrêté il y a un bon moment. Trouver l'équivalent nécessite aussi quelques modifications dans les paramètres, j'ai eu l'occasion de me rappeler les "pattern" pour des preg_match(). Perso j'évite le return en plein milieu pour privilégier une variable locale retournée à la fin quand je crée une fonction. Mais faut dire que pour l'instant le code que j'ai pu écrire n'était pas d'une très grande complexité non plus. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xaelias Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 Est-ce que quelqu'un a une idée de pourquoi gcc pourrait me balancer un warning tel que implicit declaration of strdup, pwrite, pread, mais parviens quand même à compiler et que le binaire fonctionne normalement? (sur un linux, gcc en v 4.4.7) Sinon c'est pas grave ça fonctionne mais c'est bizarre ^^ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 (modifié) The pread() and pwrite() system calls were added to Linux in version 2.1.60; the entries in the i386 system call table were added in 2.1.69. C library support (including emulation using lseek(2) on older kernels without the system calls) was added in glibc 2.1. strdup() est conforme à SVr4, BSD 4.3 et POSIX.1-2001. strndup(), strdupa() et strndupa() sont des extensions GNU. Donc ouais, le compilateur/ linker ne les voit pas parce qu'elles sont dans le kernel, la libriaire système [whatever] et non pas dans une librairie .h .def .o .lib .dll [whatever] Modifié le 25 février 2014 par foetus Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xaelias Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 Oki merki. Et du coup j'ai moyen de me débarasser de ces warnings??? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kernelcoffee Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 implicit declaration c'est que t'a oublie d'include un header. dans le doute testons : reboot fedora 20.....uncrypt harddrive.....open session....done check version gcc [kernelcoffee@homeDesktopLinux.kernelcoffee.org test_1]$ cc --version cc (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7) bon c'est pas tout a fait la meme version, mais ca n'a pas vraiment d'importance dans ce cas. ecrivons un bout de code C rapidement. int main(void) { char* str = strdup("test_write 1"); printf("test -> %s\n", str); return(0); } on compile sans les header [kernelcoffee@homeDesktopLinux.kernelcoffee.org test_1]$ cc test.c test.c: In function ‘main’: test.c:2:15: warning: incompatible implicit declaration of built-in function ‘strdup’ [enabled by default] char* str = strdup("test_write 1"); ^ test.c:3:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default] printf("test -> %s\n", str); ^ Bon sans les headers j'ai les warnings, jusque la tout va bien, c'est normal. man 3 printf me dit que la fonction est declare dans stdio.hman 3 strdup me dit que la fonction est declare dans string.h je rajoute les includes #include <string.h> #include <stdio.h> int main(void) { char* str = strdup("test_write 1"); printf("test -> %s\n", str); return(0); } ca compile desormais sans les warnings. donc ce sont des fonctions qui sont inclus dans le kernel, cependant elles sont declare dans leur header respectif, gcc est assez intelligents pour le savoir mais gueule parce que les includes ne sont pas la. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xaelias Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 My bad j'aurais du préciser que sur mon mac ça compile sans warning, et pour cause, j'ai bien include string.h, stdio, stdlib et unistd :-) (string que pour le fichier avec strdup mais je doute que pread et pwrite soient dedans ^^) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kernelcoffee Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 (modifié) donc sur ton mac (un BSD) ca compile sans soucis sur ton linux ca compile avec les warning c'est le meme code pour les deux et les hearders sont bien la ou il faut sur les deux plateforme ? tu as des options specifique quand tu compile ? je crois me souvenir qu'il y avais des soucis d'implementation de la norme C99 a une epoque. le "implicit declaration" c'est le coup ou gcc qui ne voit de declaration de fonction mais sais qu'elles existent (via l'AST), et du coup fait un include implicite (d'ou le nom du warning). Modifié le 25 février 2014 par Kernelcoffee Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xaelias Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 Le linux est pas à moi en vrai. C'est uns erveur qu'on nous fournit pour notre cours, et notre code doit compiler dessus. J'ai les flags suivant: -Wall -Wextra -g -O3 -I $(HDIR) -std=c99 Le c99 est là car sinon je me tappes des warnings sur les trucs du genre for(int k = 0, ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kernelcoffee Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 (modifié) si tu veux activer tout les check de gcc, je crois que c'est -Weverything (a la place de -Wall) my bad c'est avec clang C'est bien du C ton code ? Qu'est ce qui se passe si tu rajoute #define _POSIX_C_SOURCE 1 ? Modifié le 25 février 2014 par Kernelcoffee Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xaelias Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 Oui c'est bien du C ^^ Alors si je rajoute ton define, ça fout la merde sur mon mac, et ça change rien sur linux Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 gcc -D _POSIX_C_SOURCE Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xaelias Posté(e) le 25 février 2014 Partager Posté(e) le 25 février 2014 Ça a rien changé non plus. Par contre j'ai changé le c99 en gnu99 et tous les warnings sont partis donc... Merki les gens :-) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xaelias Posté(e) le 5 mars 2014 Partager Posté(e) le 5 mars 2014 Autre question pour un autre programme! En c++11 cette fois! Je m'amuse avec les expressions régulières, et je suis persuadé que la réponse à ma question est sur google mais je n'arrive pas à bien la formuler il faut croire... Truc tout con, j'analyse une string de la forme \d+/\d+/\d+ (autrement dit, trois nombres séparés par '/'). Donc je fais un: std::string input; // paramètre de la méthode en vraistd::smatch m;std::regex_match(input, m, std::regex("^(?:(\\d+)/){2}(\\d+)$") Le but de la chose est donc de vérifier que la string a bien la bonne tête, et en plus de récupérer les nombres en question dans m. Alors oui vu ce que j'ai je peux le faire à la main en remplaçant la regex par (\\d+)/(\\d+)/(\\d+), mais le jour où je voudrai faire la même avec 40.000 au lieu de 2 ce sera Pour l'instant, m contient (input = std::string("11/22/33")) : 11/22/33 22 33 Il me manque donc le 11. En fait, c'est surtout que pour le (?:.(.)){4} il me renvoie que le dernier. Comment est-ce que je peux corriger ça? Merci [EDIT] En plus je peux tricher pour que ça marche pour le coup, vu que derrière je fais des atoi() pour avoir la valeur en entier, la première chaîne de charactère (input) me renvoie 11. Mais une fois de plus, le comportement n'est pas celui attendu. Et si j'avait 7 nombres ça ne marcherait pas comme ça... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 6 mars 2014 Partager Posté(e) le 6 mars 2014 (modifié) strtok /* strtok example */#include <stdio.h>#include <string.h>int main() { char str[] = "11/22/33"; printf("Splitting string \"%s\" into tokens:\n", str); char* pch = strtok(str, "/"); while(pch != NULL) { printf("%s\n", pch); pch = strtok(NULL, "/"); } return 0;} Modifié le 6 mars 2014 par foetus Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.