0

ここに同様の質問があります任意のポインターにバイトオフセットを追加するポータブルで安全な方法

しかし、すべての答えはptr = (SomeType*)...で始まっています。これは、このマクロを使用したいときに、ポインターの型を知る必要があることを意味します。

#define ptradd(ptr, delta) (size_t) ptr = (size_t) ptr + (size_t) delta
ptradd(prect, offset);

VC では動作しますが、GCC ではエラー lvalue required as left operand of assignmentで失敗します。

GCCで動作させるにはどうすればよいですか?

4

2 に答える 2

0

これを試して。

#include <stdio.h>
#include <stdlib.h>

#define ptradd(ptr, delta) (ptr = (typeof(ptr)) ((size_t) ptr + (size_t) delta))

int main() {
    int a;
    int* b = &a;
    printf("b=%p\n", b);
    ptradd(b, 5);
    printf("b=%p\n", b);
}
于 2013-06-16T16:22:58.910 に答える