Frage

Ich bin einige Codes jetzt tun, und ein Problem bekommt Schlüsselwort beschränken.

typedef int* pt;

int foo(pt a, pt b)
{
 ... /* stuff */
}

Was passiert, wenn ich will eine machen und b beschränkt? Der folgende Code ist fehlgeschlagen:

typedef int* pt;

int foo(pt restrict a, pt restrict b)
{
 ... /* stuff */
}

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Sie benötigen einen „eingeschränkten Zeiger auf integer“ int * restrict p kein „Zeiger auf eingeschränkte integer“ restrict int *p, so dass Sie einen anderen typedef machen müssen. Sie können nicht „Reichweite innerhalb“ der ursprüngliche.

EDIT: Während es wahr, dass Sie kann nicht Reichweite innerhalb des typedef und der Modifikator wird immer auf der obersten Ebene gelten, in diesem Fall ist es stellt sich heraus, dass Sie wollen die restrict auf der obersten Ebene. Es ist das Gegenteil von dem, was die Menschen in der Regel laufen in mit const: typedef char *char_ptr Mittel const char_ptr (oder char_ptr const, sie sind gleichwertig) bedeuten beide „konstanter Zeiger auf char“ nicht „Zeiger auf konstante char“, das ist das, was die Leute wollen. (Siehe das SO Thread auch: C ++ typedef Interpretation von const Zeiger )

Also in diesem Fall denke ich typedef int *pt bedeutet das, dass restrict pt Mittel int * restrict pt. Es ist ziemlich einfach, um zu überprüfen, weil gcc wird über „ungültige Verwendung von‚beschränken‘“ für restrict int *x beschweren, aber nicht für restrict pt x.

Andere Tipps

Make sure you're compiling it using the C99 flag for your compiler. The restrict keyword doesn't exist in C89 C.

Having a quick look and reading this similar SO question, the code would be, as the keyword 'restrict' is not reserved keyword in C++ compilers, as indicated by the accepted answer in the above linky, either __restrict or __restricted__, again, check your compiler...

typedef int* __restrict pt;

int foo(pt a, pt b)
{
 ... /* stuff */
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top