2015-05-11 9 views
14

ich in mehreren Gelegenheiten Funktionen gesehen haben, um mit dem Qualifier const Typ definiert werden, einfach so:Funktion Rückgabewert definiert als Konstante

const int foo (int arg) 

Was ist der Punkt, in diesem? Rückgabewert der Funktion kann ohnehin nicht verändert werden ..

+0

C/C++ Compiler könnte sich anders verhalten, dass auf. – Malina

+2

Sie verwechseln das nicht mit 'const int * foo (int arg)', oder? Denn in diesem Fall macht das "const" Sinn. – user694733

+0

Das würde wirklich Sinn machen. Aber nein, ich verwechsle das nicht damit. – Malina

Antwort

10

Nach der C-Spezifikation (C99, Abschnitt 6.7.3):

Die mit qualifizierten Typen verknüpften Eigenschaften sind nur für Ausdrücke mit Lwerten sinnvoll.

Funktionen sind keine lvalues, also const Schlüsselwort für sie hat keine Bedeutung. Der Compiler ignoriert sie während der Kompilierung.

Referenz: Online C99 standard

+0

Sieht aus wie dies auch in C11 gemäß http://en.cppreference.com/w/c/language/const und gilt Die Arbeitsnorm ISO/IEC 9899: 201x unter http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf in Abschnitt 6.7.3 auf Seite 120 hat dieselbe Sprache. –

12

In C ist es in der Tat nutzlos ist, und Compiler entsprechende Warnungen ausgeben kann:

$ echo 'const int foo (int arg);' | clang -Weverything -fsyntax-only -xc - 
<stdin>:1:1: warning: 'const' type qualifier on return type has no effect 
     [-Wignored-qualifiers] 
const int foo (int arg); 
^~~~~~ 
1 warning generated. 
+0

EiC und gcc unter Windows erkennen jedoch keine Warn-/Fehlermeldungen. – Malina

+3

@Malina: gcc (mit 4.9.2 über hier) tut, wenn Sie hinzufügen "-Wextra" – Christoph

Verwandte Themen