[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

aic7xxx_osm.c und ANSI-C (Urspruenglich: Bug im Kernel 2.4.20?)



Hallo,

erst einmal eines vorne weg:
Es handelt sich hier um Treiberquellen, nicht um Kernelquellen.
Die Kernelquellen folgen sehr viel strengeren Richtlinen als
die diversen Treiberprogramme, die oftmals von Lust und Laune
des jeweiligen Herstellers abhängen.

Sie (Matthias Fechner) schrieben:

> aic7xxx_osm.o aic7xxx_osm.c
> aic7xxx_osm.c:420:27: missing terminating " character
> aic7xxx_osm.c:439:1: missing terminating " character

Dafür ist in 420 (z.B.) dieser Codeteil verantwortlich:

------------------------------------------------------------------> SNIP
MODULE_PARM_DESC(aic7xxx, "period delimited, options string.
     verbose			Enable verbose/diagnostic logging
.
.
.
u.s.w.
------------------------------------------------------------------> SNIP

Man muss in ANSI-C bei jedem String, der sich über mehre Zeilen
erstreckt, einen Backslash am Ende jeder Zeile anfügen, solange bis der
String schließlich mit einem " terminiert.
Also z.B.

------------------------------------------------------------------> SNIP
MODULE_PARM_DESC(aic7xxx, "period delimited, options string.\
     verbose			Enable verbose/diagnostic logging\
.
.
.
u.s.w.
------------------------------------------------------------------> SNIP

Das sollte eigentlich jeder C-Programmierer ohne nach denken zu müssen
wissen.
Warum das nun in aic7xxx_osm.c (zumindest teilweise) nicht der Fall ist
vestehe ich im Moment noch gar nicht.

Normalerweise sollte sich ein C-Compiler weigern so etwas zu übersetzen
und Ihrer tut das ja offenbar auch.

Wenn ich nun auf meinen System (Debian Woody) folgendes Programm mit
einem einfachen Aufruf (ohne Schalter) von gcc (/usr/bin/gcc-2.95) zur
Übersetzung bringe:

--------------------------------------> SNIP
#include <stdio.h>

int main () {
 printf("Hallo
         Welt!\n");
 
 exit(0);
} 
--------------------------------------> SNIP

So Übersetzt es der Compiler klaglos.
Ganz so als hätte ich (korrekt)

 printf("Hallo\n\
         Welt!\n");

geschrieben.

Rufe ich den Compiler hingegen mit dem Schalter "-pedantic-errors" auf,
so verhält er sich wie ein ANSI-C-Compiler und bricht mit einer
Fehlermeldung ab.

Proprietäre Erweiterungn von Standardsprachen wie ANSI-C führen sehr
schnell zu Schwierigkeiten und erschweren die Portierbarkeit von
Software enorm.

Welchen C-Compiler benutzen Sie eigentlich?
Auf was für einem System arbeiten Sie?

Ich habe in Ihrem Compileraufruf kein 
"-pedantic-errors" endecken können.
Spielen Sie mal etwas mit den Optionen Ihres Compilers,
bei gleichzeitiger Konsultation der entsprechenden man pages.

Ich benutzt den aic7xxx ebenfalls.
Habe allerdings mit dem NICHT ANSI-C konformen gcc-2.95 übersetzt
(natürlich OHNE "-pedantic-errors").

- oliver
























Reply to: