C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

warning: function returns an aggregate

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Jan Schmidt
Guest





PostPosted: Thu Jun 16, 2005 6:48 am    Post subject: warning: function returns an aggregate Reply with quote



Hallo,

ich habe folgendes kleines Programm.

#include <string>
#include <iostream>

using namespace std;

class test
{
public:
test (){}
string do_it (const string a)
{
return a + "huhu";
}
};


int main (int argc, char **argv)
{
test tmp;

cout << tmp.do_it ("hallo ") << endl;
}

Wenn ich das kompiliere mit

g++ -o test test.cpp -Wall -W -Wundef -Wshadow -Wpointer-arith
-Wcast-qual -Wcast-align -Wwrite-strings
-Wsign-compare -Wredundant-decls -Waggregate-return
-Wmissing-prototypes

bekomme ich eine Reihe von Warnungen, u.a.

test.cpp:62: warning: function returns an aggregate

und

test.cpp:72: warning: function call has aggregate value

Ich verwende den Compiler

g++ --version
g++ (GCC) 3.3.4 (pre 3.3.5 20040809)

Beide Warnungen sind mir vorher (gcc 2.x) nie begegnet - auch der
vc6.0 erzeugt sie nicht. Was bedeuten die Warnungen und wie kann ich
sie verhindern (außer Warnung ausschalten)?

Danke,
jan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Rolf Magnus
Guest





PostPosted: Thu Jun 16, 2005 9:19 am    Post subject: Re: warning: function returns an aggregate Reply with quote



Jan Schmidt wrote:

Quote:
g++ -o test test.cpp -Wall -W -Wundef -Wshadow -Wpointer-arith
-Wcast-qual -Wcast-align -Wwrite-strings
-Wsign-compare -Wredundant-decls -Waggregate-return
^^^^^^^^^^^^^^^^^
-Wmissing-prototypes

bekomme ich eine Reihe von Warnungen, u.a.

test.cpp:62: warning: function returns an aggregate

und

test.cpp:72: warning: function call has aggregate value

Ich verwende den Compiler

g++ --version
g++ (GCC) 3.3.4 (pre 3.3.5 20040809)

Beide Warnungen sind mir vorher (gcc 2.x) nie begegnet - auch der
vc6.0 erzeugt sie nicht. Was bedeuten die Warnungen und wie kann ich
sie verhindern (außer Warnung ausschalten)?

Wieso schaltest du diese Warnungen explizit ein, wenn du nicht weißt, was
sie bedeuten? Und warum schaust du nicht ins Manual des Compilers?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Jan Schmidt
Guest





PostPosted: Thu Jun 16, 2005 10:20 am    Post subject: Re: warning: function returns an aggregate Reply with quote



Rolf Magnus <ramagnus (AT) t-online (DOT) de> writes:

Quote:
Jan Schmidt wrote:

g++ -o test test.cpp -Wall -W -Wundef -Wshadow -Wpointer-arith
-Wcast-qual -Wcast-align -Wwrite-strings
-Wsign-compare -Wredundant-decls -Waggregate-return
^^^^^^^^^^^^^^^^^
-Wmissing-prototypes

bekomme ich eine Reihe von Warnungen, u.a.

test.cpp:62: warning: function returns an aggregate

Wieso schaltest du diese Warnungen explizit ein, wenn du nicht
weißt, was sie bedeuten? Und warum schaust du nicht ins Manual
des Compilers?

Wann die Warnung kommt, weiß ich schon - mich hat halt nur
interessiert, was den Compiler an dem Code stört, bzw. wie man das
umschreiben muß, damit die Warnung nicht mehr kommt.

Die einfachte Variante mit weglassen von -Waggregate-return wollte ich
halt nicht gelten lassen. (Das beste ist halt, so zu coden, daß die
Compiler nichts mehr zu warnen haben...)

gruß,
jan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Thu Jun 16, 2005 12:33 pm    Post subject: Re: warning: function returns an aggregate Reply with quote

Jan Schmidt wrote:

Quote:
Rolf Magnus <ramagnus (AT) t-online (DOT) de> writes:

Jan Schmidt wrote:

g++ -o test test.cpp -Wall -W -Wundef -Wshadow -Wpointer-arith
-Wcast-qual -Wcast-align -Wwrite-strings
-Wsign-compare -Wredundant-decls -Waggregate-return
^^^^^^^^^^^^^^^^^
-Wmissing-prototypes

bekomme ich eine Reihe von Warnungen, u.a.

test.cpp:62: warning: function returns an aggregate

Wieso schaltest du diese Warnungen explizit ein, wenn du nicht
weißt, was sie bedeuten? Und warum schaust du nicht ins Manual
des Compilers?

Wann die Warnung kommt, weiß ich schon - mich hat halt nur interessiert,
was den Compiler an dem Code stört, bzw. wie man das umschreiben muß,
damit die Warnung nicht mehr kommt.

Nun, wie schon das Manual sagt:

-Waggregate-return
Warn if any functions that return structures or unions are defined or
called. (In languages where you can return an array, this also elicits a
warning.)

Deine Funktion do_it hat als Rückgabetyp eine Instanz einer Klasse (nämlich
std::string), die ein "aggregate" ist (Klassen sind im Prinzip das gleiche
wie struct). Es wird also genau wie im Manual beschrieben eine Warnung für
die Definition der Funktion und eine für deren Aufruf generiert. Was
erscheint dir daran unlogisch?
Wenn du die Warnung vermeiden willst, ohne sie auszuschalten, muß du also
auf die Rückgabe von Instanzen von Klassen aus Funktionen generell
verzichten. Wie sinnvoll das ist, mußt du selbst entscheiden. Immerhin bist
du ja auch selbst derjenige, der die Warnung unbedingt haben will.

Quote:
Die einfachte Variante mit weglassen von -Waggregate-return wollte ich
halt nicht gelten lassen. (Das beste ist halt, so zu coden, daß die
Compiler nichts mehr zu warnen haben...)

Das heißt aber nicht, daß man selbst wahlfrei irgendwelche zusätzlichen
Warnungen akitivieren sollte, deren Bedeutung einem nicht klar ist.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Karl Heinz Buchegger
Guest





PostPosted: Thu Jun 16, 2005 1:03 pm    Post subject: Re: warning: function returns an aggregate Reply with quote

Jan Schmidt wrote:
Quote:


[snip]

Quote:
Die einfachte Variante mit weglassen von -Waggregate-return wollte ich
halt nicht gelten lassen. (Das beste ist halt, so zu coden, daß die
Compiler nichts mehr zu warnen haben...)

Seltsam:
Du befiehlst dem Compiler dass er dich warnen soll, wenn du ein
Aggregat (also ein struct, class oder union) aus einer Funktion
zurueckgibst und wenn der Compiler dann tut was du ihm befiehlst,
passt es dir auch nicht.

Patient: "Doktor, wenn ich das mache, tut's weh.?"
Doktor: "Dann machen sie's halt nicht!"

Du hast 2 Moeglichkeiten:
* Entweder du gibst nie ein Aggregat als Returnwert zurueck (Das wird
sich aber in einem echten Program so gut wie gar nicht durchziehen lassen)
* oder Du schaltest diese Warnung ab.

--
Karl Heinz Buchegger
[email]kbuchegg (AT) gascad (DOT) at[/email]

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Heinz Saathoff
Guest





PostPosted: Thu Jun 16, 2005 3:50 pm    Post subject: Re: warning: function returns an aggregate Reply with quote

Moin,

Jan Schmidt schrieb...
Quote:
[snip]

test.cpp:62: warning: function returns an aggregate

und

test.cpp:72: warning: function call has aggregate value

Ich verwende den Compiler

g++ --version
g++ (GCC) 3.3.4 (pre 3.3.5 20040809)

Beide Warnungen sind mir vorher (gcc 2.x) nie begegnet - auch der
vc6.0 erzeugt sie nicht. Was bedeuten die Warnungen und wie kann ich
sie verhindern (außer Warnung ausschalten)?

Wie die anderen schon schrieben, hast Du die Warnung ja explizit
angefordert. Nun noch zur Frage, warum eine Warnung gegeben werden
sollte: Übergabe und Rückgabe von Aggregaten kann die Effizienz
beeinträchtigen, besonders wenn die Aggregate sehr groß sind oder
aufwändigen Kopierkonstruktor besitzen. Wenn man also statt 'by value'
die Übergabe/Rückgabe 'by reference' oder (nicht so gut) 'by pointer'
macht, kann das resultierende Programm schneller werden.


- Heinz


--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Jan Schmidt
Guest





PostPosted: Tue Jun 21, 2005 7:02 am    Post subject: Re: warning: function returns an aggregate Reply with quote

Heinz Saathoff <hsaat (AT) despammed (DOT) com> writes:

Quote:
Moin,

Jan Schmidt schrieb...
[snip]

test.cpp:62: warning: function returns an aggregate

und

test.cpp:72: warning: function call has aggregate value

Ich verwende den Compiler

g++ --version
g++ (GCC) 3.3.4 (pre 3.3.5 20040809)

Beide Warnungen sind mir vorher (gcc 2.x) nie begegnet - auch der
vc6.0 erzeugt sie nicht. Was bedeuten die Warnungen und wie kann ich
sie verhindern (außer Warnung ausschalten)?

Wie die anderen schon schrieben, hast Du die Warnung ja explizit
angefordert. Nun noch zur Frage, warum eine Warnung gegeben werden
sollte: Übergabe und Rückgabe von Aggregaten kann die Effizienz
beeinträchtigen, besonders wenn die Aggregate sehr groß sind oder
aufwändigen Kopierkonstruktor besitzen. Wenn man also statt 'by value'
die Übergabe/Rückgabe 'by reference' oder (nicht so gut) 'by pointer'
macht, kann das resultierende Programm schneller werden.

ja, ok. genau darauf wollte ich hinaus - danke!

Quote:


- Heinz

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.