]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cgo: document C.sizeof_T and zero-sized field restriction
authorIan Lance Taylor <iant@golang.org>
Tue, 12 Jan 2016 15:03:28 +0000 (07:03 -0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 12 Jan 2016 17:31:01 +0000 (17:31 +0000)
Update #9401.
Update #11925.
Update #13919.

Change-Id: I52c679353693e8165b2972d4d3974ee8bb1207ef
Reviewed-on: https://go-review.googlesource.com/18542
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/cgo/doc.go

index 8ec4301112baeeb0989592e3b442c1b9d31dfac2..bd38a5c153b8e5aabee055a571572da580da25ae 100644 (file)
@@ -125,11 +125,19 @@ The C types __int128_t and __uint128_t are represented by [16]byte.
 To access a struct, union, or enum type directly, prefix it with
 struct_, union_, or enum_, as in C.struct_stat.
 
+The size of any C type T is available as C.sizeof_T, as in
+C.sizeof_struct_stat.
+
 As Go doesn't have support for C's union type in the general case,
 C's union types are represented as a Go byte array with the same length.
 
 Go structs cannot embed fields with C types.
 
+Go code can not refer to zero-sized fields that occur at the end of
+non-empty C structs.  To get the address of such a field (which is the
+only operation you can do with a zero-sized field) you must take the
+address of the struct and add the size of the struct.
+
 Cgo translates C types into equivalent unexported Go types.
 Because the translations are unexported, a Go package should not
 expose C types in its exported API: a C type used in one Go package