Warne, wenn der als __unused markierte Parameter verwendet wird

8

Mit dem Parameter -Wunused-Parameter können Sie __unused für unbenutzte Parameter als Compiler-Optimierung erzwingen. Der folgende Code verursacht zwei Warnungen:

%Vor%

Diese Warnungen werden durch Hinzufügen von __uned die nicht verwendeten Argumente behoben.

%Vor%

Wenn Sie einen Parameter verwenden, der mit "__unused" gekennzeichnet ist, warnt clang 4.1 nicht oder ist fehlerhaft.

%Vor%

Das gleiche Verhalten zeigt __attribute__((unused)) .

%Vor%

Gibt es eine Möglichkeit zu warnen oder Fehler bei __unused? Was passiert, wenn Sie versehentlich einen nicht verwendeten Parameter verlassen? Im obigen Beispiel scheint argc den richtigen Wert zu haben, obwohl es der Compiler sein könnte, der den Hinweis nicht ausnutzt, und ich würde mich nicht ohne weiteres auf dieses Verhalten verlassen.

    
wjl 24.01.2013, 01:53
quelle

2 Antworten

12

Das __unused -Attribut soll verhindern Beschwerden, wenn Argumente für Funktionen / Methoden oder Funktionen / Methoden ungenutzt sind, um ihre mangelnde Nutzung zu erzwingen.

Der Begriff, der im GCC-Handbuch verwendet wird, lautet:

  

Dieses an eine Funktion angehängte Attribut bedeutet, dass die Funktion möglicherweise unbenutzt ist

Und für Variablen :

  

Dieses an eine Variable angehängte Attribut bedeutet, dass die Variable möglicherweise nicht verwendet werden soll.

Die gebräuchlichste Verwendung ist die Entwicklung gegenüber einer Schnittstelle - z. Callbacks, bei denen Sie möglicherweise gezwungen sind, mehrere Parameter zu akzeptieren, aber nicht alle verwenden.

Ich benutze es ein bisschen, wenn ich Test-getriebene Entwicklung mache - meine anfängliche Routine nimmt einige Parameter und tut nichts, so nehmen alle Parameter __attribute__((unused)) . Bei der Entwicklung nutze ich die Parameter. Am Ende der Entwicklung entferne ich sie von der Methode und sehe, was ausschüttelt.

    
Petesh 25.01.2013, 00:35
quelle
3

Eine andere Möglichkeit, diese Katze zu häuten, ist das Entfernen (oder Auskommentieren) des Namens des Parameters.

%Vor%

Nun warnt der Compiler nicht, dass argv unbenutzt ist, und Sie können es nicht verwenden, weil es keinen Namen hat.

    
Marshall Clow 28.01.2013 22:03
quelle

Tags und Links