c!() { /* proc-macro */ }
Expand description

Creates a compile-time checked char_p::Ref<'static> out of a string literal.


use ::safer_ffi::prelude::*;

fn concat (s1: char_p::Ref<'_>, s2: char_p::Ref<'_>)
  -> char_p::Box
    format!("{}{}", s1.to_str(), s2.to_str())
        .unwrap() // No inner nulls in our format string

fn main ()
        concat(c!("Hello, "), c!("World!")).as_ref(),
        c!("Hello, World!"),

If the string literal contains an inner null byte, then the macro will detect it at compile time and thus cause a compile-time error (allowing to skip the then unnecessary runtime check!):

let _ = ::safer_ffi::c!("Hell\0, World!"); // <- Compile error