Wie man den Compiler dazu bringt, den Zeiger nicht auf Zeigerwarnungen zu zeigen

8

Ich habe einen Code, der viel von int nach void * und umgekehrt (es ist mir egal, ob es hässlich ist. Ich mag generische Sachen)

Beispiel:

%Vor%

aber wenn ich kompiliere, bekomme ich ein Bajillion

%Vor%

Warnungen. Gibt es eine Markierung, die besagt, dass gcc diese spezielle Warnung nicht ausgeben soll?

Ich kompiliere mit -Wall, also bin ich mir nicht sicher, ob ich das so einfach wegmachen kann

    
Jean-Luc Nacif Coelho 31.03.2014, 00:23
quelle

5 Antworten

9

nehmen Sie einfach die Flagge, die der Compiler Ihnen gibt und schlagen Sie ein "Nein" davor tut den Trick!

%Vor%     
Jean-Luc Nacif Coelho 31.03.2014, 00:27
quelle
12

Im Interesse anderer, die möglicherweise nach einer Antwort wie ich suchen:

Wenn Sie kein zusätzliches Kompilierungsflag hinzufügen möchten, weil Sie ein Interview möglicherweise versehentlich an einer void * -Volume-Stelle widersprechen, können Sie das folgende Snippet verwenden, um einen Cast von einem int in ein void * where zu erzwingen Sie sind sicher, dass Sie wollen, dass es passiert, und dann wird der Compiler Sie nicht über die Besetzung ärgern:

%Vor%

Stellen Sie sicher, dass stdint.h enthalten ist, damit Sie Folgendes tun können:

%Vor%     
DanZimm 07.05.2015 16:27
quelle
5

Sie könnten 'size_t' verwenden.

Wenn Sie beispielsweise int i und void * a haben,

i = (void *) a; gibt Ihnen diese Warnung

um dies zu vermeiden add size_t

i = (void *) (size_t) a;

    
Vasu 16.10.2016 05:19
quelle
3

In einigen Fällen wäre dies wünschenswert (z. B. für den letzten Zeigerparameter von glVertexAttribPointer in OpenGL). Sie sollten in der Lage sein, die Warnung zu vermeiden, indem Sie Folgendes tun:

%Vor%     
Quig 24.10.2014 20:04
quelle
0

Die Warnung weist darauf hin, dass Ints schmaler als Zeiger sind, sodass Sie Informationen verlieren, wenn Sie von einem Zeiger auf einen Int-Wert umwandeln. Wie oben vorgeschlagen, verwenden Sie uintptr_t. Das ist ein ganzzahliger Typ, der so breit wie ein Zeiger ist. Wenn Sie gezwungen werden, int zu verwenden, dann sind Sie SOL. "Generisch" == kaputt.

    
pat 31.03.2014 01:40
quelle

Tags und Links