Browse Source Download (without any required ccan dependencies)

Module:

short_types

Summary:

shorter names for standard integer types

Author:

Rusty Russell <rusty@rustcorp.com.au>

Description:

"C is a Spartan language, and so should your naming be."

     -- Linus Torvalds

The short_types header provides for convenient abbreviations for the posixly-damned uint32_t types. If ccan/endian/endian.h is included, it also provides be32/le32 for explicitly annotating types of specific endian.

Include this header, if only to stop people using these identifiers for other things!

Example:

#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <ccan/short_types/short_types.h>

// Print nonsensical numerical comparison of POSIX vs. short_types. 
#define stringify_1(x)  #x
#define stringify(x)    stringify_1(x)

static void evaluate(size_t size, const char *posix, const char *sht,
                     unsigned int *posix_total, unsigned int *sht_total,
                     unsigned int *size_total)
{
        printf("\t%ssigned %s: POSIX %zu%%, short %zu%%\n",
               sht[0] == 'u' ? "un" : "",
               sht+1,
               strlen(posix)*100 / size,
               strlen(sht)*100 / size);
        *posix_total += strlen(posix);
        *sht_total += strlen(sht);
        *size_total += size;
}

#define EVALUATE(psx, short, pt, st, t)                         \
        evaluate(sizeof(psx), stringify(psx), stringify(sht), pt, st, t)

int main(void)
{
        unsigned int posix_total = 0, sht_total = 0, size_total = 0;

        printf("Comparing size of type vs size of name:\n");

        EVALUATE(uint8_t, u8, &posix_total, &sht_total, &size_total);
        EVALUATE(int8_t, s8, &posix_total, &sht_total, &size_total);
        EVALUATE(uint16_t, u16, &posix_total, &sht_total, &size_total);
        EVALUATE(int16_t, s16, &posix_total, &sht_total, &size_total);
        EVALUATE(uint32_t, u32, &posix_total, &sht_total, &size_total);
        EVALUATE(int32_t, s32, &posix_total, &sht_total, &size_total);
        EVALUATE(uint64_t, u64, &posix_total, &sht_total, &size_total);
        EVALUATE(int64_t, s64, &posix_total, &sht_total, &size_total);

        printf("Conclusion:\n"
               "\tPOSIX is %u%% LESS efficient than binary.\n"
               "\tshort_types.h is %u%% MORE efficient than binary.\n",
               (posix_total - size_total) * 100 / size_total,
               (size_total - sht_total) * 100 / size_total);
        return 0;
}

License:

CC0 (Public domain)