← index
count.c
Source: C2x.Examples/src/count.c
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

size_t compare(const char c, const size_t counter) [[unsequenced]] {
    if (c == '\n')
        return counter + 1;
    return counter;
}

size_t count(const char *restrict src, const size_t len) [[reproducible]] {
    size_t counter = 0;
    for (size_t i = 0; i < len; ++i) {
        counter = compare(src[i], counter);
    }
    return counter;
}

int main(int argc, char **argv) {
    if (argc != 2) {
        fprintf(stderr, "Error incorrect args use:\ncount <file>\n");
        return EXIT_FAILURE;
    }
    size_t counter = 0;
    FILE *fptr = fopen(argv[1], "rb");
    if (fptr == nullptr) {
        fprintf(stderr, "Error could not open file: %s\n", argv[1]);
        return EXIT_FAILURE;
    }
    size_t bytes = 0;
    static constexpr size_t BUFFER_SIZE = 4096;
    char buffer[BUFFER_SIZE] = {};
    while ((bytes = fread(buffer, sizeof(char), BUFFER_SIZE, fptr)) != 0) {
        counter += count(buffer, bytes);
    }
    fclose(fptr);
    printf("%s: %zu\n", argv[1], counter);
    return EXIT_SUCCESS;
}