2009-09-08 16 views
5

W poniższym przykładzie:błąd używając ograniczać słowa kluczowego

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

otrzymuję ten błąd:

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

skompilować z -std = C99, przy użyciu GCC 3.4

jakieś pomysły?

+0

Kompiluje się dla mnie dobrze. Czy masz najnowszą wersję GCC? –

+0

Ten kod kompiluje się dla mnie na Sun C 5.8 i GCC 3.4.6. Comeau online narzeka tylko na niewykorzystaną deklarację zmienną. Podaj więcej informacji o swoim środowisku. –

+0

... ale Comeau był w trybie C99. Kiedy umieszczam go w trybie C++, narzeka na to samo. –

Odpowiedz

9

W języku C++, nie jest słowem kluczowym (z wyjątkiem Microsoft extensions). Nie oznacza to, co robi w C. Wygląda na to, że próbowałeś zastosować tryb C99 do kompilatora C++. Użyj kompilatora C do kompilacji kodu C i użyj kompilatora C++ do kompilacji C++. Żaden język nie jest podzbiorem drugiego.

+0

Agh, to wyjaśnij. Nie mogę skompilować przy użyciu kompilatora C, ponieważ używam funkcji C++, w których używane jest ograniczenie. Jakie jest obejście, jeśli takie istnieje? – vehomzzz

+4

Spróbuj '__restrict'. Wygląda na to, że jest to rozszerzenie GCC, a także rozszerzenie Microsoft. Zastanów się nad streszczeniem go za pomocą makra, aby kompilatory spoza GCC nie dusiły się. –

+0

__restrict zrobił lewę .. dzięki – vehomzzz