반응형
'0+ptr'(0 + 포인터)은 무엇을 의미합니까?
Perl의 소스 코드에서 다음 매크로를 찾았습니다.
#define GvGP(gv) (0+(gv)->sv_u.svu_gp)
어디에sv_u.svu_gp로 선언됩니다.GP* svu_gp단결하여sv_u.
에 대한 정의를 찾을 수 없습니다.GP하지만 저는 0 더하기 포인터가 무엇을 의미하는지 더 혼란스럽습니다.누구 좀 가르쳐 주시겠어요?
R 값으로 만들기 위해 사용되는 것 같은데, 실제로는 읽기 전용으로 만드는 이유는 무엇입니까?
예:글을 쓸 수 있습니다.
x = 1;
하지만 이것은 작동하지 않을 것입니다.
0+x = 1;
편집
PERL 저장소에서 관련 커밋을 알려준 Dave Mitchell에게 감사드립니다.
GvCV_set() 및 GvGP_set() 매크로를 추가합니다.
GvCV() 및 GvGP() rvalue-only로 설정...
@@ -52,7 +57,8 @@ struct gp {
# define GvNAME_get(gv) ({ assert(GvNAME_HEK(gv)); (char *)HEK_KEY(GvNAME_HEK(gv)); })
# define GvNAMELEN_get(gv) ({ assert(GvNAME_HEK(gv)); HEK_LEN(GvNAME_HEK(gv)); })
#else
-# define GvGP(gv) ((gv)->sv_u.svu_gp)
+# define GvGP(gv) (0+(gv)->sv_u.svu_gp)
+# define GvGP_set(gv,gp) ((gv)->sv_u.svu_gp = (gp))
# define GvFLAGS(gv) (GvXPVGV(gv)->xpv_cur)
# define GvSTASH(gv) (GvXPVGV(gv)->xnv_u.xgv_stash)
# define GvNAME_HEK(gv) (GvXPVGV(gv)->xiv_u.xivu_namehek)
정말로, 목적은 만드는 것이었습니다.GvGPr 값을 만들어 읽기 전용입니다.
그것은 그것을 rvalue로 만든다, 즉 당신은 할 수 없습니다.&(0+(gv)->sv_u.svu_gp)게다가, 만약 그것이 대신 배열이었다면, 즉.0+"string"그것은 또한 배열을 부식시킬 것입니다.char *a부터char [7]본질적으로std::decay.
언급URL : https://stackoverflow.com/questions/69040993/what-does-0ptr-0-plus-a-pointer-mean
반응형
'programing' 카테고리의 다른 글
| Node.js - Winston 라이브러리를 사용하여 로그에 타임스탬프를 추가하는 방법은 무엇입니까? (0) | 2023.07.27 |
|---|---|
| UIImageView의 터치 이벤트를 감지하려면 어떻게 해야 합니까? (0) | 2023.07.27 |
| 스프링 데이터 받침대 및 Cors (0) | 2023.07.27 |
| div 요소에서 키 누름(또는 키다운) 이벤트를 캡처하려면 어떻게 해야 합니까? (0) | 2023.07.27 |
| 파이썬 함수(또는 코드를 직렬화)를 쉽게 피킹할 수 있는 방법이 있습니까? (0) | 2023.07.27 |