Macro print

#[macro_export]
macro_rules! print {
    ($($arg:tt)*) => { ... };
}

Prints to [stdout][crate::stdout].

Equivalent to the [println!] macro except that a newline is not printed at the end of the message.

Note that stdout is frequently line-buffered by default so it may be necessary to use [std::io::Write::flush()] to ensure the output is emitted immediately.

NOTE: The print! macro will lock the standard output on each call. If you call print! within a hot loop, this behavior may be the bottleneck of the loop. To avoid this, lock stdout with [AutoStream::lock][crate::AutoStream::lock]:

#  #[cfg(feature = "auto")] {
use std::io::Write as _;

let mut lock = anstream::stdout().lock();
write!(lock, "hello world").unwrap();
# }

Use print! only for the primary output of your program. Use [eprint!] instead to print error and progress messages.

NOTE: Not all print! calls will be captured in tests like [std::print!]

Panics

Panics if writing to stdout fails for any reason except broken pipe.

Writing to non-blocking stdout can cause an error, which will lead this macro to panic.

Examples

#  #[cfg(feature = "auto")] {
use std::io::Write as _;
use anstream::print;
use anstream::stdout;

print!("this ");
print!("will ");
print!("be ");
print!("on ");
print!("the ");
print!("same ");
print!("line ");

stdout().flush().unwrap();

print!("this string has a newline, why not choose println! instead?\n");

stdout().flush().unwrap();
# }