file in std - Rust
Description: Expands to the file name in which it was invoked.

## file

# Macro file

1.38.0 · Source

    macro_rules! file {
        () => { ... };
    }

Expand description

Expands to the file name in which it was invoked.

With `line!` and `column!`, these macros provide debugging information for developers about the location within the source.

The expanded expression has type `&'static str`, and the returned file is not the invocation of the `file!` macro itself, but rather the first macro invocation leading up to the invocation of the `file!` macro.

The file name is derived from the crate root’s source path passed to the Rust compiler and the sequence the compiler takes to get from the crate root to the module containing `file!`, modified by any flags passed to the Rust compiler (e.g. `--remap-path-prefix`). If the crate’s source path is relative, the initial base directory will be the working directory of the Rust compiler. For example, if the source path passed to the compiler is `./src/lib.rs` which has a `mod foo;` with a source path of `src/foo/mod.rs`, then calling `file!` inside `mod foo;` will return `./src/foo/mod.rs`.

Future compiler options might make further changes to the behavior of `file!`, including potentially making it entirely empty. Code (e.g. test libraries) relying on `file!` producing an openable file path would be incompatible with such options, and might wish to recommend not using those options.

## §Examples

    let this_file = file!();
    println!("defined in file: {this_file}");