2009-09-08 3 views
5

Im folgenden Beispiel beschränken:Fehler mit Stichwort

void foo (double *ptr) 
{ 
    const double * restrict const restr_ptr=ptr; 
} 

ich diesen Fehler:

error: expected a ";"  const double * restrict const restr_ptr=ptr; 
                ^

ich mit -std = c99 kompilieren, gcc 3.4

Irgendwelche Ideen?

+0

Es kompiliert für mich gerade gut. Hast du eine aktuelle Version von GCC? –

+0

Dieser Code kompiliert sich für mich auf Sun C 5.8 und GCC 3.4.6. Comeau online beschwert sich nur über die ungenutzte Variablendeklaration. Bitte geben Sie weitere Details zu Ihrer Umgebung an. –

+0

... aber Comeau war im C99-Modus. Wenn ich es in den C++ Modus setze, beschwert es sich über dasselbe. –

Antwort

9

In C++ ist restrict kein Schlüsselwort (außer Microsoft extensions). Es bedeutet nicht, was es in C tut. Es sieht so aus, als ob Sie versucht haben, den C99-Modus auf Ihren C++ - Compiler anzuwenden. Verwenden Sie einen C-Compiler, um C-Code zu kompilieren, und verwenden Sie einen C++ - Compiler, um C++ zu kompilieren. Keine Sprache ist eine Untermenge der anderen.

+0

Agh, das zu erklären. Ich kann nicht mit C-Compiler kompilieren, da ich C++ - Funktionen verwende, in denen restricte verwendet wird. Was ist die Problemumgehung? – vehomzzz

+4

Versuchen Sie '__restrict'. Sieht so aus, als wäre es eine GCC-Erweiterung sowie eine Microsoft-Erweiterung. Erwägen Sie, es mit einem Makro zu abstrahieren, damit Nicht-GCC, Nicht-MS-Compiler nicht daran ersticken. –

+0

__restrict hat den Trick gemacht .. danke – vehomzzz