Skip to main content

Standard

Enum Standard 

Source
pub enum Standard {
    C89,
    C99,
    C11,
    C17,
    C23,
}
Expand description

Which revision of the C standard to accept.

The variants are ordered, so a feature is gated by comparing: a construct C11 introduced is accepted when standard >= Standard::C11. C17 is C11 with a different __STDC_VERSION__ and adds nothing else.

Variants§

§

C89

ISO/IEC 9899:1990, the standard everyone still calls C89.

C90 is the ISO republication of ANSI X3.159-1989 with no technical change, so c89! and c90! are one entry point under two names.

§

C99

ISO/IEC 9899:1999.

§

C11

ISO/IEC 9899:2011.

§

C17

ISO/IEC 9899:2018.

§

C23

ISO/IEC 9899:2024.

Implementations§

Source§

impl Standard

Source

pub fn stdc_version(self) -> Option<&'static str>

The value of __STDC_VERSION__ for this revision, or None where the revision has none.

C89 as published had no __STDC_VERSION__ at all — Amendment 1 added it in 1995 — so c89! and gnu89! leave the macro undefined, which is what gcc -std=c89 does and what a program testing #ifdef __STDC_VERSION__ is looking for. __STDC__ is still 1.

Source§

impl Standard

Source

pub fn as_str(self) -> &'static str

The name used in diagnostics.

Source

pub fn macro_name(self) -> &'static str

The macro that selects this standard, as a diagnostic names it.

Source

pub fn macro_name_in(self, dialect: Dialect) -> &'static str

The macro that selects this standard in dialect.

Source

pub fn macro_names_in(self, dialect: Dialect) -> &'static [&'static str]

Every name the macro that selects this standard in dialect may be written with, without the !.

Two of them only for C89, which has two names and one entry point; the point of the list is that the search for an invocation in the crate’s sources knows what to look for, and c90! { … } has to be found as readily as c89! { … }.

Source

pub fn include_macro_names_in(self, dialect: Dialect) -> &'static [&'static str]

The same for the include_…! family, which is one entry point per name of Standard::macro_names_in.

Source

pub fn requires(self, what: &str, needed: Standard) -> String

The message a feature from a newer revision gets in this one.

what is the subject, already quoted where it names a token: standard.requires("'_Static_assert'", Standard::C11) reads '_Static_assert' requires C11 or later (this block is c99!). Saying which macro the block is written with is the point — the fix is to change the macro, and nothing in the C says which one it is.

Trait Implementations§

Source§

impl Clone for Standard

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for Standard

Source§

impl Debug for Standard

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Standard

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Eq for Standard

Source§

impl Ord for Standard

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl PartialEq for Standard

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialOrd for Standard

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StructuralPartialEq for Standard

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.