Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

nombre réponses : 25

#0 Re : -1 »  [RESOLU] Probléme d'opération sur les caractére d'une chaine en c++ » Le 11/06/2017, à 13:07

no_spleen
Réponses : 6

Bonjour,

Le problème du code initial c'est que

string sortie="";

Crée un string "sortie" de taille zéro. C++ te permet néanmoins d'écrire au dela de la fin du string, avec la syntaxe

sortie[compteur]=test[i];

Mais cela n'augmenta pas la taille de "sortie" (tu peux t'en convaincre en placant un cout de la taille de sortie à l'intérieur de ta boucle, tu verras que la taille reste à zéro). Si tu continues comme cela pour un texte plus long, le programme finira par crasher. Cela peut surprendre, mais c'est à la fois la force et la faiblesse du C++. Tu es autorisé à écrire n'importe ou dans la mémoire, mais tu as interêt à savoir ce que tu fait.

La syntaxe

sortie += test[i];

Fonctionne car tu appelle l'opérateur += de la classe string. Cet opérateur augmente effectivement la taille du string et append le contenu de test à l'intérieur.

J'espère que c'était clair.

Bien à toi

#1 Re : -1 »  Compiler un programme » Le 05/05/2017, à 20:37

no_spleen
Réponses : 4

Bonjour,

J'ai réussi a compiler avec la commande

gcc -o programme *.c -I/usr/include -L/usr/lib -lncurses

#2 Re : -1 »  fonction retournant un pointeur de fonction[RESOLU] » Le 01/05/2017, à 21:51

no_spleen
Réponses : 7

Bonjour,

Tu as des warnings car tu as oubliés des parenthèses lors de l'appel de ma_fonction et fonction2

double (*pf) (int, int) = ma_fonction();
double (*p) (int, int) = fonction2();

#3 Re : -1 »  fonction retournant un pointeur de fonction[RESOLU] » Le 02/05/2017, à 08:35

no_spleen
Réponses : 7

Bonjour,

Je ne suis pas certain de comprendre la question. fonction1 est bien une fonction. Pour initialiser un pointeur sur une fonction, la syntaxe logique serait :

double (*pf) (int, int) = &ma_fonction;

-> Tu stockes l'adresse de la fonction "ma_fonction" dans le pointeur pf.

Mais le C te permet de te passer de l'opérateur &, c'est pourquoi tu peux écrire

double (*pf) (int, int) = ma_fonction;

Voici ce qu'en disent Kernighan et Rithchie (ils font allusion à un exemple dans le bouquin, mais on comprend l'idée).

"In the call to qsort, strcmp and numcmpare addresses of functions. Since
they are known to be functions, the & operator is not necessary, in the same way
that it is not needed before an array name."

#4 Re : -1 »  fonction retournant un pointeur de fonction[RESOLU] » Le 02/05/2017, à 18:48

no_spleen
Réponses : 7
plouf1221 a écrit :

Merci pour vos exemples, mais pourquoi alors dans ma_fonction je peux retourner fonction1
Normalement je doit retourner un pointeur de fonction et non une fonction et le compilateur ne génère pas d'erreur.
double (*ma_fonction(void)) (int ,int) {
    return fonction1; // doit retourner une pointeur de fonction mais retourne une fonction. C'est cela que je ne comprends pas.
}

As-tu lu ma réponse ? Je pense que tout est dit.

#5 Re : -1 »  Erreur expected '=', ',', ';', 'asm' or '__attribute__[RESOLU] » Le 23/04/2017, à 20:52

no_spleen
Réponses : 13

Bonjour,

Il manque un point virgule à la fin de la ligne

intarray standart_empty_intarray_create()

dans intarray.h

Bàt,

#6 Re : -1 »  Erreur expected '=', ',', ';', 'asm' or '__attribute__[RESOLU] » Le 25/04/2017, à 22:16

no_spleen
Réponses : 13

Bonjour,

Ton code tel que donné dans ton premier post, avec le point virgule en +, compile. Donc, j'imagine que ton erreur vient d'un changement que tu as fait par la suite. Il nous faudrait donc la dernière version de ton code.

Tu peux aussi essayer de compiler avec clang, il donne généralement des erreurs plus explicites. Par exemple, il faudra que tu regardes à ceci :

intarray.c:98:1: warning: control reaches end of non-void function

Il s'agit de intarray_get_index_of_min_from.

Bàt,

#7 Re : -1 »  Erreur expected '=', ',', ';', 'asm' or '__attribute__[RESOLU] » Le 26/04/2017, à 10:56

no_spleen
Réponses : 13

Salut,

Le problème avec intarray_get_index_of_min_from n'est pas liés aux crochets. C'est que tu l'as définie comme étant une fonction retournant un int, mais elle ne retourne rien. Donc, soit :

- Tu t'es trompé dans ta déclaration, et il faut la définir comme void
- Tu as oublié un return quelque part

#8 Re : -1 »  Erreur de segmentation (core dumped) » Le 21/04/2017, à 23:44

no_spleen
Réponses : 1

Bonjour,

Il y a beaucoup de choses qui ne vont pas dans ton programme (déjà, n'oublie pas que les arrays en C commencent à 0, pas à 1).

Mais pour le moment, ton erreur de segmentation vient de la ligne 114.

printf(" PID %d_%d\n",pid_fils[k],nombreMystere);

Car la variable k n'est jamais initialisée.

Pour trouver cela en 10 secondes, tu compiles en mode debug et tu lance ton prog dans gdb.

gcc -g prog.c -o prog
gdb prog

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400dac in main () at prog.c:114
114	printf(" PID %d_%d\n",pid_fils[k],nombreMystere);


Bonne chance !

#9 Re : -1 »  Problème erreur de segmentation (core dumped) » Le 06/04/2017, à 07:22

no_spleen
Réponses : 21

Saut,

Un petit conseil. Apprendre le C, c'est aussi apprendre a utiliser gdb ! Cela va te faire gagner un temps fou et te permettre de garder tes cheveux plus longtemps :-)

Voici ce que tu obtient en lancant ton programme dans gdb

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400b6f in afficher (l=0x0) at main.c:87
87		printf("%d\t",l->v);

Ce qui confirme ce que t'as dit pinguoinnux ci dessus.

Cheers,

#10 Re : -1 »  Recherche de langage pr programmation algorithmique : finance 2 marché » Le 18/06/2016, à 08:45

no_spleen
Réponses : 8

Bonjour,

Si tu parles bien du job de "quantitative developer", le C++ est de loin de langage le plus demandé. Je t'invite à regarder les offres d'emploi sur Linkedin pour ce type de poste. On y demande généralement en plus le C et le python. J'ai moi-même passé plusieurs entretiens pour ce genre de poste, et le seul requirement non négociable est le C++.

Bàt,

EDIT: Autre chose, si tu t'intéresse vraiment au monde bancaire/financier, ne perd pas trop de temps à apprendre les tout derniers langages à la mode. En particulier, ne t'attend pas à utiliser les dernières fonctionnalités du C++11, encore moins le C++14. Pour te donner une idée, dans ma boite précédente je codais encore en COBOL. Je n'ai encore jamais travaillé sur un système avec python installé, donc tous mes scripts sont en ksh ou perl.

#11 Re : -1 »  [SOLVED] Besoin d'un coup de main en C++ » Le 05/12/2015, à 12:56

no_spleen
Réponses : 11

Bonjour,

Comme Pingouinux te l'a renseigné, le problème vient de ta variable r. Tu l'initializes à 0 en dehors de ta boucle sur la matrice, et tu l'incrémentes de 1 à l'intérieur à chaque passage -> à la deuxième ligne, r devient égal à 2, ce qui est en dehors des indexes de ta matrices.

Pour ce qui est du style, il y a pas mal à corriger dans ton code. J'ai changé 2/3 trucs dans le code ci-dessous. Je ne dis pas que tout ce que j'ai fait est à garder, ce sont juste des idées en vracs.

PS : je n'ai pas vérifié la bonne implémentation de l'algorithme !
PSS : Est-ce que l'algorithme de Gauss ne s'applique pas seulement aux matrices carrées ? Si oui, pas besoin de demander le nombre de lignes ET de colonnes.

Changements :
- J'ai placé l'initialisation de r dans ta boucle
- Plutôt que de taper vector<vector<float>> partout, mieux vaux effectuer un define en début de code
- Comme renseigné par grigouille, il vaudrait mieux définir une vraie classe matrice, mais j'imagine que ce n'est pas le but de l'exercice
- pourquoi définir une fonction valeur absolue alors qu'il en existe une dans la librairie standard ?
- pour transformer tous les éléments d'un container, il vaut mieux utiliser std::transform que de faire une boucle


#include <iostream>
#include <vector>
#include <string.h>
#include <cmath>
#include <algorithm>

using namespace std;

using Matrice = std::vector< std::vector<float> >;

void afficher_matrice(Matrice matrice) 
{
	for (auto const &row : matrice){ 
		for (auto const &item : row){ 
			cout << item << "    "; 
		}
		cout << "\n\n"; 
	}
}

Matrice matrice_identite(int lignes, int colones)
	// CRÉATION D'UNE MATRICE IDENTITE
{
	Matrice matrice;
	for (int i=0;i<lignes;i++)
	{
		matrice.push_back(vector<float>(colones));
	}

	// remplissage
	for (unsigned int i=0;i<lignes;i++) { for (unsigned int j=0;j<colones;j++) {
		if ( i == j ) { matrice[i][j] = 1; }
		else { matrice[i][j] = 0; }
	}}

	return matrice;
}

void creer_matrice(Matrice &matrice)
	//CRÉATION D'UNE MATRICE AVEC REMPLISSAGE
{
	int lignes,colones;
	cout << "Vous allez creer une matrice, commencez par renseigner sa taille :\nNombre de lignes ? ";
	cin >> lignes;
	cout << "\nNombre de colones ? ";
	cin >> colones;
	for (int i=0;i<lignes;i++){ // ici on fait des pushback pour intialiser notre tableau, ce sera une matrice ligne*colone
		matrice.push_back(vector<float>(colones));

	}
	cout << "\nVotre matrice a bien ete cree. Merci maitnenat de la remplir :";
	for (int i=0;i<lignes;i++){
		for(int j=0;j<colones;j++){
			cout << "\nLigne " << i << " Colone " << j << " : ";
			cin >> matrice[i][j];
		}
	}
	cout << "Votre matrice a bien ete remplie\n";
	//afficher_matrice(matrice);

}

// Commençons par coder les opération éllémentaires utilisées par l'algorythme de gauss-jordan :

void echanger_deux_lignes(Matrice &matrice, int i, int j)
	// ECHANGE DE DEUX LIGNES D'UNE MATRICE
{
	float relai;
	for (unsigned int k=0;k<matrice.size();k++) // on parcourt sur les colones pour inverser les valeurs une par unes
	{
		relai=matrice[i][k];
		matrice[i][k]=matrice[j][k];
		matrice[j][k]=relai;
	}
}

void multiplier_ligne_par_scalaire(Matrice &matrice, int numligne, float scalaire)
	// MULTIPLICATION D'UNE LIGNE D'UNE MATRICE PAR UN SCALAIRE
{
	std::transform(begin(matrice[numligne]),end(matrice[numligne]),begin(matrice[numligne]),
			[&scalaire](auto x){return x*scalaire;});
}

void soustraire_mult_ligne_a_autre(Matrice &matrice, int ligneL, int ligneM, float scalaire)
	// SOUSTRACTION DU MULTIPLE D'UN SCALAIRE PAR UNE LIGNE L A UNE LIGNE M
{
	std::transform(begin(matrice[ligneL]) , end(matrice[ligneL]),
                       begin(matrice[ligneM]) , begin(matrice[ligneL]),
                       [&scalaire](auto l , auto m){return l -= m*scalaire;});
}

// Passons maitnenant a l'inversion en elle meme : il faudra appliquer l'agorythme sur deux matrice ( celle fournie et l'identitée )
Matrice inverse_matrice(Matrice &matrice)
	// INVERSION D'UNE MATRICE VIA GAUSS-JORDAN
{
	// Notons m la taille de la matrice
	int m = matrice.size();
	// créons une matrice identitée a laquelle on apliquera la meme chose
	Matrice ident=matrice_identite(m,m);

	// c'est partit pour l'algorythme de gauss-jordan :
	for (int j=0;j<m;++j)
	{
		float max_colone=abs(matrice[0][j]);
		int k=0;
		int r=0;
		for (int i=r;i<m;i++)
		{
			if ( abs(matrice[i][j]) > max_colone ) 
			{
				max_colone = abs(matrice[i][j]); k=i;
			}   
		}
		if ( matrice[k][j] != 0 )
		{
			r+=1;
			multiplier_ligne_par_scalaire(matrice,k,1/matrice[k][j]);
			multiplier_ligne_par_scalaire(ident,k,1/matrice[k][j]);
			echanger_deux_lignes(matrice,k,r);
			echanger_deux_lignes(ident,k,r);
			for ( int i=0;i<m;i++)
			{
				if ( i != r )
				{ 
					soustraire_mult_ligne_a_autre(matrice,i,r,matrice[i][j]);
					soustraire_mult_ligne_a_autre(ident,i,r,matrice[i][j]);
				}
			}
		}
	}
	return ident;
}

int main()
{
	Matrice matrice;
	creer_matrice(matrice);
	afficher_matrice(matrice);
	afficher_matrice(inverse_matrice(matrice));
}

#12 Re : -1 »  [SOLVED] Besoin d'un coup de main en C++ » Le 05/12/2015, à 14:42

no_spleen
Réponses : 11

Salut !

Effectivement, c'est du C++14, il faut compiler avec l'option -std=C++14.

J'ai aussi testé un peu après avoir posté, et ce n'est clairement pas correct. Mais cela, c'est ton exercice, on ne va pas le faire à ta place :-)

Côté style, il y a aussi une fonction swap pour échanger les valeurs de deux containers, donc tu peux écrire

void echanger_deux_lignes(Matrice &matrice, int i, int j)
{
        swap(matrice[i],matrice[j]);
}

Plutot que d'écrire le swap à la main.

#13 Re : -1 »  [SOLVED] Besoin d'un coup de main en C++ » Le 05/12/2015, à 14:52

no_spleen
Réponses : 11

Bon,

En fait, le problème vient de m'apparaitre, alors je lache le morceau (je pense que les modifs sont assez claires, mais n'hésite pas à poser des questions).

#include <iostream>
#include <vector>
#include <string.h>
#include <cmath>
#include <algorithm>

using namespace std;

using Row = std::vector<float>;
using Matrice = std::vector< Row >;

void afficher_matrice(const Matrice &matrice) 
{
	for (auto const &row : matrice){ 
		for (auto const &item : row){ 
			cout << item << "    "; 
		}
		cout << "\n\n"; 
	}
}


Matrice matrice_identite(int n)
{
	Matrice matrice(n,Row(n,0.0));

	for (auto i=0 ; i < n ; ++i){
		matrice[i][i] = 1.0;
	}

	return matrice;
}

Matrice creer_matrice()
{
	int n;
	cout << "Vous allez creer une matrice, commencez par renseigner sa dimension ";
	cin >> n;

	Matrice matrice(n,Row(n));

	cout << "\nVotre matrice a bien ete cree. Merci maitenant de la remplir :";
	for (int i=0;i<n;++i){
		for(int j=0;j<n;++j){
			cout << "\nLigne " << i << " Colone " << j << " : ";
			cin >> matrice[i][j];
		}
	}
	cout << "Votre matrice a bien ete remplie\n";
	return matrice;

}

// Commençons par coder les opération éllémentaires utilisées par l'algorythme de gauss-jordan :

void echanger_deux_lignes(Matrice &matrice, int i, int j)
{
	swap(matrice[i],matrice[j]);
}

void multiplier_ligne_par_scalaire(Matrice &matrice, int numligne, float scalaire)
{
	std::transform(begin(matrice[numligne]),end(matrice[numligne]),begin(matrice[numligne]),
			[scalaire](auto x){return x*scalaire;});
}

void soustraire_mult_ligne_a_autre(Matrice &matrice, int ligneL, int ligneM, float scalaire)
{
	std::transform(begin(matrice[ligneL]) , end(matrice[ligneL]),
		       begin(matrice[ligneM]) , begin(matrice[ligneL]),
		       [scalaire](auto l , auto m){return l -= m*scalaire;});
}

// gauss-jordan 
Matrice inverse_matrice(Matrice &matrice)
{
	int m = matrice.size();
	Matrice ident=matrice_identite(m);

	int r=-1;
	for (int j=0;j<m;++j)
	{
		float max_colone=abs(matrice[0][j]);
		int k=0;
		for (int i=r+1;i<m;++i)
		{
			if ( abs(matrice[i][j]) > max_colone ) 
			{
				max_colone = abs(matrice[i][j]); k=i;
			}   
		}
		if ( matrice[k][j] != 0 )
		{
			r+=1;
			auto val = matrice[k][j];
			multiplier_ligne_par_scalaire(matrice,k,1.0/val);
			multiplier_ligne_par_scalaire(ident,k,1.0/val);
			echanger_deux_lignes(matrice,k,r);
			echanger_deux_lignes(ident,k,r);
			for ( int i=0;i<m;++i)
			{
				if ( i != r )
				{ 
					val = matrice[i][j];
					soustraire_mult_ligne_a_autre(matrice,i,r,val);
					soustraire_mult_ligne_a_autre(ident,i,r,val);
				}
			}
		}
	}
	return ident;
}

int main()
{
	auto matrice = creer_matrice();
	afficher_matrice(matrice);
	afficher_matrice(inverse_matrice(matrice));
}

En gros :
- r initialisé à -1
- passage par une variable intermédiaire avant l'appel aux fonctions multiplier_ligne_par_scalaire et soustraire_mult_ligne_a_autre, car sinon le premier appel modifie la valeur du scalaire que tu utilises pour le deuxième appel.

Le reste des modifications est juste cosmétique. J'ai modifié le code pour travailler sur des matrices carrées, à toi de voir si c'est correct (c'est un peu loin pour moi, mais on n'inverse que des matrices carrées non ?).

#14 Re : -1 »  [SOLVED] Besoin d'un coup de main en C++ » Le 05/12/2015, à 15:47

no_spleen
Réponses : 11

Alors,

std::transform permet d'appliquer une fonction sur tous les membres d'un/plusieurs containers. Tu trouveras la syntaxe facilement sur internet. Pour la raison de son utilisation, tout est dit ici.

Auto permet de laisser le compilateur déterminer le type d'une variable. D'autres explications ici.

Dans ma version du code, j'utilise aussi des lambda, une autre facilité de C++11. N'hésite pas à faire quelques recherches sur google.

Bon week end !

#15 Re : -1 »  [RESOLU] [C] Afficher *proprement* une structure » Le 10/11/2015, à 12:43

no_spleen
Réponses : 2

Bonjour,

Je viens de vérifier dans ma bible (The Linux Programming Interface, Michael Kerrisk), et ta façon de faire est bien la bonne.

De plus, sur mon système j'ai le define suivant dans le header sched.h

#define sched_priority  __sched_priority

Ce qui fait que tu pourrais utiliser une syntaxe plus naturelle

printf("Valeur de param = %d\n", param.sched_priority);

Bonne journée !

#16 Re : -1 »  [résolu]error:CPU you selected does not support x86-64 instruction set » Le 23/07/2015, à 20:28

no_spleen
Réponses : 11

Bonjour,

Peux-tu essayer en enlevant l'option -march=pentiumpro dans le paragraphe suivant de ton makefile ?

 56 
 57 linux:
 58         $(MAKE) $(MFLAGS) -f Makefile.arch \
 59         "prog   = medit-2.3-linux"\
 60         "CC     = gcc" \
 61         "CFLAGS = -O3 -march=pentiumpro -ansi -fexpensive-optimizations \
 62                   -Wuninitialized -Wunused -Winline -Wshadow" \
 63         "LDFLAGS= -s -static-libgcc $(HOME)/code/library.cur/objects/$(ARCHI)/*.o" \
 64         "INCDIR = -I. -I$(HOME)/code/library.cur/sources" \
 65         "XLIBS  = -L/usr/X11R6/lib -lXmu -lXext -lX11" \
 66         "GL_LIB   = /usr/lib/libGL.so" \
 67         "GLU_LIB  = /usr/local/lib/libGLU.so" \
 68         "GLUT_LIB = /usr/local/lib/libglut.a" \
 69         "EXEDIR = $(HOME)/bin/i86"

#17 Re : -1 »  [résolu]error:CPU you selected does not support x86-64 instruction set » Le 25/07/2015, à 17:36

no_spleen
Réponses : 11

Hello,

J'ai moi même réalisé ma thèse dans le domaine des éléments finis. Connais-tu GMSH ?

Sinon, j'ai réussi à compiler ton programme, en bidoullant un peu les makefiles.

makefile

 57 linux:
 58         $(MAKE) $(MFLAGS) -f Makefile.arch \
 59         "prog   = medit-2.3-linux"\
 60         "CC     = gcc" \
 61         "CFLAGS = -O3 -ansi -fexpensive-optimizations \
 62                   -Wuninitialized -Wunused -Winline -Wshadow" \
 63         "LDFLAGS= -s -static-libgcc " \
 64         "INCDIR = -I. -I./sources/" \
 65         "XLIBS  = -L/usr/X11R6/lib -lXmu -lXext -lX11" \
 66         "GL_LIB   = -lGL" \
 67         "GLU_LIB  = -lGLU" \
 68         "GLUT_LIB = -lglut" \
 69         "EXEDIR = ."

Makefile.arch

 1 # makefile for medit
  2 
  3 # objects list
  4 src    = $(wildcard *.c)
  5 objs   = $(src:.c=.o)
  6 header = $(wildcard *.h)
  7 
  8 # working dirs
  9 SRCDIR = sources
 10 OBJDIR = objects
 11 ARCDIR = archives
 12 DIRDIR = objects $(OBJDIR) $(ARCDIR)
 13 VPATH  = $(SRCDIR)
 14 
 15 # objects list
 16 src    = $(wildcard $(SRCDIR)/*.c)
 17 header = $(wildcard $(SRCDIR)/*.h)
 18 objs   = $(patsubst $(SRCDIR)%,$(OBJDIR)%,$(src:.c=.o))
 19 
 20 #.SILENT:
 21 
 22 $(prog): $(DIRDIR) $(objs)
 23         echo "#define COMPIL " '"' `date` '"' > $(SRCDIR)/compil.date
 24         $(CC) -c $(CFLAGS) $(INCDIR) $(SRCDIR)/medit.c -o $(OBJDIR)/medit.o
 25         $(CC) -o $@ $(objs) $(LDFLAGS) $(GLUT_LIB) $(GL_LIB) $(GLU_LIB) $(XLIBS) -lm
 26         mv $@ $(EXEDIR)
 27 
 28 $(OBJDIR)/%.o: $(SRCDIR)/%.c
 29         $(CC) -c $(CFLAGS) $(INCDIR) $< -o $@
 30 
 31 $(objs): $(header)
 32 
 33 $(DIRDIR):
 34         @[ -d $@ ] || mkdir $@
 35 
 36 clean:
 37         -rm $(objs) $(EXEDIR)/$(prog)
38 
 39 tar:$(DIRDIR)
 40         tar czf $(ARCDIR)/medit.`date +"%Y.%m.%d"`.tgz sources makefile
 41 
 42 target: $(prog)
 43 

#18 Re : -1 »  [résolu]error:CPU you selected does not support x86-64 instruction set » Le 28/07/2015, à 19:49

no_spleen
Réponses : 11

Bonsoir,

Normalement, tu devrais avoir l'éxécutable "medit-2.3-linuxCC" dans le répertoire à partir duquel tu as lancé l'installation.

Si tu veux me contacter, n'hésite pas à m'envoyer un message privé via ce forum.

Bàt,

#19 Re : -1 »  [résolu]error:CPU you selected does not support x86-64 instruction set » Le 28/07/2015, à 20:34

no_spleen
Réponses : 11

Très bonne nouvelle, n'oublie pas de mettre [resolu] au début du titre de ce sujet.

Pour envoyer un message privé, il suffit de cliquer sur mon pseudo au dessus de ce message.

#20 Re : -1 »  [C++] Utiliser les rValue references ? [RESOLU] » Le 09/07/2015, à 06:02

no_spleen
Réponses : 12

Bonjour,

Tu dois utiliser std::move

my_class obj4(std::move(my_class(1,2)));

#21 Re : -1 »  [C++] Utiliser les rValue references ? [RESOLU] » Le 10/07/2015, à 07:32

no_spleen
Réponses : 12

Bonjour,

Je pense qu'il s'agit simplement d'une optimisation du compilateur.

Si tu regardes les displays obtenus par la ligne suivante

my_class obj4{my_class(1,2)};

Tu n'en a qu'un, qui est le constructeur par défaut. -> Le compilateur est assez malin pour comprendre qu'il n'a pas besoin de créer l'object et d'ensuite le déplacer.

Sans optimisation, tu devrais en avoir 2, un display pour la création par défaut du my_class(1,2), et un contructeur par R-value.

En utilisant std:move, tu forces le comportement voulu, qui est en fait moins performant.

#22 Re : -1 »  Recherche un code source mininaliste du noyaux linux. » Le 29/06/2015, à 19:57

no_spleen
Réponses : 3

Hello,

Ce livre doit être exactement ce que tu cherches.

The Art of Linux Kernel Design: Illustrating the Operating System Design Principle and Implementation
de Lixiang Yang

#23 Re : -1 »  librairie UART (programmation C sur AVR) » Le 13/03/2015, à 09:22

no_spleen
Réponses : 8

Bonjour,

As-tu déjà regardé du côté de avr-libc ?

http://www.nongnu.org/avr-libc/

Je débute actuellement l'aprentissage de la programmation d'AVR. Ton retour d'expérience m'intéresse :-)

#24 Re : -1 »  programmer en fortran » Le 12/02/2015, à 20:04

no_spleen
Réponses : 8

Hello,

Question bête, pourquoi ne pas utiliser le compilateur gfortran qui si je ne me trompe pas se trouve dans les dépots ?