sentinel pointers and c strings
This commit is contained in:
@@ -51,6 +51,17 @@ Bodyless manual and imported C functions may be variadic:
|
||||
log_values :: c_func(tag c_int, ...) c_int
|
||||
```
|
||||
|
||||
Zero-terminated byte strings can be passed directly to immutable C character
|
||||
pointers without making `u8` and `c_char` generally interchangeable:
|
||||
|
||||
```bro
|
||||
printf :: c_func(format *c_char, ...) c_int
|
||||
|
||||
main :: func() void {
|
||||
_ = printf("answer: %d\n", 42)
|
||||
}
|
||||
```
|
||||
|
||||
Arguments after `...` accept concrete scalars, pointers, and nullable pointers.
|
||||
Narrow integers are promoted to the target C `int` or `unsigned int`, and
|
||||
`f32`/`c_float` are promoted to `c_double`. Arrays, slices, structs, and other
|
||||
@@ -87,8 +98,9 @@ Current prototype features:
|
||||
- Immutable `::` bindings, mutable function-local `=` bindings, and `_` sinks
|
||||
- Exact-width signed/unsigned integers, `f32`, `f64`, `isize`, `usize`, and loose integer-constrained `int`
|
||||
- Target-dependent atomic `c_*` primitive types, `c_func`, and pointer-only `c_struct`
|
||||
- Arrays, sentinel arrays, pointers, slices, sentinel slices, strings, character literals, optionals, and native structs
|
||||
- Explicit `.ptr`/`.len`, slicing, postfix pointer dereference and optional unwrap, and keyed struct literals
|
||||
- Arrays, sentinel arrays, single-item pointers, many-item pointers, sentinel many-item pointers, slices, sentinel slices, strings, character literals, optionals, and native structs
|
||||
- String literals as immutable pointers to static zero-terminated byte arrays
|
||||
- Pointer-preserving `.ptr`/`.len`, pointer-to-array indexing and slicing, postfix pointer dereference and optional unwrap, and keyed struct literals
|
||||
- Contextual integer constants and compile-time folding of addition and unary negation trees
|
||||
- Directory packages with merged declarations and file-local relative imports
|
||||
- Relative C header imports as synthetic package namespaces
|
||||
|
||||
Reference in New Issue
Block a user