
For example, the following did not work before but does work with this change: // int add(int a, int b) { // return a + b; // } import "C" func main() { println("add:", C.add(3, 5)) } Even better, the functions in the header are compiled together with the rest of the Go code and so they can be optimized together! Currently, inlining is not yet allowed but const-propagation across functions works. This should be improved in the future.
64 строки
1,1 КиБ
Text
64 строки
1,1 КиБ
Text
fortytwo: 42
|
|
add: 8
|
|
myint: 3 5
|
|
myint size: 2
|
|
longlong: -1099511627776
|
|
global: 3
|
|
defined ints: 5 5
|
|
defined floats: +5.800000e+000 +5.800000e+000
|
|
defined string: defined string
|
|
defined char: 99
|
|
defined expr: 9
|
|
15: 15
|
|
25: 25
|
|
callback 1: 50
|
|
callback 2: 600
|
|
variadic0: 1
|
|
variadic2: 15
|
|
headerfunc: 6
|
|
bool: true true
|
|
float: +3.100000e+000
|
|
double: +3.200000e+000
|
|
complex float: (+4.100000e+000+3.300000e+000i)
|
|
complex double: (+4.200000e+000+3.400000e+000i)
|
|
complex long double: (+4.300000e+000+3.500000e+000i)
|
|
char match: true
|
|
void* match: true true true
|
|
int64_t match: true
|
|
struct: true 256 -123456 +3.140000e+000
|
|
array: 5 6 7
|
|
union: true
|
|
union s: 22
|
|
union f: +3.140000e+000
|
|
union global data: 5 8 1
|
|
union local data: 5 8 1
|
|
union s: true
|
|
union f: +6.280000e+000
|
|
union field: +6.280000e+000
|
|
bitfield a: 15
|
|
bitfield b: 1
|
|
bitfield c: 2
|
|
bitfield d: 47
|
|
bitfield e: 5
|
|
bitfield a: 7
|
|
bitfield b: 0
|
|
bitfield c: 3
|
|
bitfield d: 47
|
|
bitfield e: 5
|
|
struct: 3 5
|
|
n in chain: 3
|
|
n in chain: 6
|
|
n in chain: 7
|
|
option: 12
|
|
option A: 0
|
|
option B: 1
|
|
option C: -5
|
|
option D: -4
|
|
option E: 10
|
|
option F: 11
|
|
option G: 12
|
|
option 2A: 20
|
|
option 3A: 21
|
|
enum width matches: true
|
|
CFLAGS value: 17
|
|
copied string: foobar
|