Kann ich eine Funktion typedef in Funktionsdefinitionen verwenden?

8

Ich habe definiert:

%Vor%

Nun möchte ich diesen typedef in der Definition von Funktionen des Typs FunkyFunc , z. B.

, verwenden können %Vor%

oder

%Vor%

oder

%Vor%

kann ich etwas ähnliches wie oben beschrieben? Keiner von ihnen scheint zu kompilieren.

    
einpoklum 30.12.2013, 13:46
quelle

5 Antworten

8

Dies ist schlecht gebildet in C ++ aus dem Entwurf Standardabschnitt 8.3.5 Funktionen Absatz 10 sagt :

  

Ein typedef des Funktionstyps kann verwendet werden, um eine Funktion zu deklarieren, aber nicht um eine Funktion zu definieren (8.4).   [Beispiel:

%Vor%      

-endebeispiel] [...]

Das können wir in C sehen. Dies ist auch ausdrücklich aus dem C99-Standardentwurfsabschnitt 6.9.1 Funktionsdefinitionen ausgeschlossen:

  

Der in einer Funktionsdefinition deklarierte Bezeichner (der Name der Funktion) soll   einen Funktionstyp haben, wie er durch den Deklaratorteil der Funktionsdefinition angegeben ist 141

und Fußnote 141 sagt:

  

Die Absicht ist, dass der Typentyp in einer Funktionsdefinition nicht von typedef geerbt werden kann:

und hat das folgende Beispiel:

%Vor%

C11 sagt dieselben Dinge mit Ausnahme der Fußnote 162 .

    
Shafik Yaghmour 30.12.2013 13:52
quelle
4

Nein. Sie können typedef zu deklarieren einer Funktion verwenden:

%Vor%

aber eine Funktionsdefinition muss mit einem Deklarator in Funktionsstil geschrieben werden.

Hinweis: Dies ist sicherlich der Fall in C ++, und ich bin ziemlich sicher, dass C in dieser Hinsicht das gleiche ist; aber es wäre besser, wenn Sie eine einzige Sprache wählen würden, nach der Sie fragen könnten, da es signifikante Unterschiede zwischen C und C ++ geben kann, selbst wenn Sie sich vorstellen, dass sie identisch sind.

    
Mike Seymour 30.12.2013 13:50
quelle
1

Sie könnten #define s verwenden, um zu simulieren, was die C-Sprache nicht zulässt (wie Mike Seymour Antwort ):

%Vor%

Ob eure Kollegen-Codierer euch dafür mögen werden, ist eine andere Geschichte.

    
alk 30.12.2013 14:11
quelle
0

Schreiben Sie einfach int f(int x) { return 2*x; } .

Wenn Sie einen "FunkyFunc" als Parameter an eine andere Funktion übergeben möchten, zum Beispiel

void do_something(FunkyFunc *func) { ... }

Dann kannst du einfach

schreiben

do_something(&f);

    
user1220978 30.12.2013 13:48
quelle
-1

Was Sie geschrieben haben, funktioniert nicht so, wie Sie es möchten. Typedef ist ein Alias ​​für einen anderen Typ. Stellen Sie sich vor, dass Ihr Typdef nicht viel mehr als ein #define ist. Dann sehen Sie, wie der Code aussehen würde.

%Vor%

Diese Syntax wird nicht kompiliert.

    
TimDave 30.12.2013 13:52
quelle

Tags und Links