lint und Includes

Kamikaze

Warrior of Sunlight
Staff member
Ich habe mal ein wenig C-Code mit hilfe von lint bereinigt.
Code:
> lint server.c
server.c:
stdlib.h(274): warning: ANSI C does not support 'long long' [265]
stdlib.h(275): warning: ANSI C does not support 'long long' [265]
stdlib.h(275): warning: ANSI C does not support 'long long' [265]
_types.h(60): warning: struct __timer never defined [233]
_types.h(61): warning: struct __mq never defined [233]
stdio.h(76): warning: struct __sFILEX never defined [233]
signal.h(100): warning: struct __ucontext never defined [233]
_pthreadtypes.h(44): warning: struct pthread never defined [233]
_pthreadtypes.h(45): warning: struct pthread_attr never defined [233]
_pthreadtypes.h(46): warning: struct pthread_cond never defined [233]
_pthreadtypes.h(47): warning: struct pthread_cond_attr never defined [233]
_pthreadtypes.h(48): warning: struct pthread_mutex never defined [233]
_pthreadtypes.h(49): warning: struct pthread_mutex_attr never defined [233]
_pthreadtypes.h(51): warning: struct pthread_rwlock never defined [233]
_pthreadtypes.h(52): warning: struct pthread_rwlockattr never defined [233]
_pthreadtypes.h(53): warning: struct pthread_barrier never defined [233]
_pthreadtypes.h(54): warning: struct pthread_barrier_attr never defined [233]
_pthreadtypes.h(55): warning: struct pthread_spinlock never defined [233]
_pthreadtypes.h(75): warning: struct pthread_barrierattr never defined [233]
sem.h(32): warning: struct sem never defined [233]
lint: cannot find llib-lc.ln
Lint pass2:
atol used( server.c(53) ), but not defined
semget used( server.c(80) ), but not defined
shmctl used( server.c(170) ), but not defined
signal used( server.c(91) ), but not defined
exit used( server.c(208) ), but not defined
semctl used( server.c(149) ), but not defined
printf used( server.c(49) ), but not defined
strcmp used( server.c(135) ), but not defined
__error used( server.c(68) ), but not defined
shmat used( server.c(72) ), but not defined
shmget used( server.c(65) ), but not defined
semop used( server.c(121) ), but not defined
shmdt used( server.c(161) ), but not defined
Wie man sieht hat es aber auch eine Menge Beschwerden über den Code in System-Includes. Ich habe in der Manual Page nichts dazu gefunden, gibt es eine Möglichkeit Systemdateien von der Prüfung auszuschließen?

Dann ist da noch die Sache mit dem pass2. Ich habe versucht Prototypen mit dem Schlüsselwort extern einzusetzen um die Sache zu bereinigen, das war aber nicht die Lösung. Kann mir da jemand einen Tipp geben?
 
Code:
lint: cannot find llib-lc.ln
Das ist wohl die Ursache dafür, dass die Funktionen/Structs aus libc als "never defined" angekreidet werden. Unter OpenBSD ist die Datei unter /usr/libdata/lint zu finden.

Des Weiteren gilt, dass alle Libraries, die beim Linken mit eingebunden werden, auch lint bekannt gemacht werden müssen. Folglich sollten bei..
Code:
$ lint -lpthread server.c
.. auch die Fehler bezüglich struct pthread_* verschwinden.
 
Interessant, es gibt eine llib-lposix.ln und eine llib-lstdc.ln. Eine llib-lc.ln ist tatsächlich nicht da. Meine Welt ist mit NO_PROFILE/WITHOUT_PROFILE gebaut. Kann das damit zu tun haben? Außer der Empfehlung das es Zeit spart und niemand es zu brauchen scheint habe ich keine Ahnung, was profiled libraries sind.
 
Mit {NO,WITHOUT}_PROFILE hat das nichts zu tun. Die profiled libraries braucht man übrigens, wenn man z.B. gprof einsetzen will, um in seinem Programm die relevanten Falschenhälse zu finden.

Die Entscheidung, ob die llib-l${LIB}.ln gebaut wird oder nicht, hängt an der Variablen WANT_LINT. Auf die Schnelle konnte ich jetzt allerdings nicht herausfinden, ob und wo die unter FreeBSD gesetzt wird. In bsd.{init,compat,own,lib,sys}.mk und dem Makefile der jeweiligen Library jedenfalls nicht.
 
Danke erst mal für die Info. Weder in der src.conf noch in der make.conf ist so etwas wie WITH_LINT vorgesehen. Deshalb würde ich sagen, die Option gibt es unter FreeBSD nicht.

Ich muss damit wohl direkt an die Mailingliste.
 
Die Variable/das Flag heiß unter FreeBSD WANT_LINT, wie in der bsd.lib.mk nachzulesen ist. Unter OpenBSD ist's WANTLINT und wird im Makefile von der Library gesetzt.

So, nun aber genug mit der Besserwisserei, Essen wartet.
 
Da frage ich mich doch, in welcher Manpage findet man das?

Edit:
Danke auch übrigens. Ich baue gerade die Welt nochmal neu.
 
Last edited:
Da frage ich mich doch, in welcher Manpage findet man das?

bei OpenBSD findest du das in /usr/share/mk/bsd.README - ansonsten solltest du dir die Makefiles auch angucken, da steht viel drin. Manpages gibt es dazu eher nicht.
 
Blöd das ganze, das gehört meiner Meinung nach ordentlich dokumentiert. Vielleicht finde ich ja mal Zeit dazu.

Unter amd64 ist WANT_LINT unter FreeBSD übrigens broken. Scheint aber niemanden zu interessieren. Ich hoffe es findet sich jemand, der einen Patch committet, wenn ich einen gebastelt habe.
 
Back
Top