#include #include int strcmp_(const char* lhs, const char* rhs) { while (1) { char lhs_c = *lhs++; char rhs_c = *rhs++; if (lhs_c != rhs_c) { return lhs_c - rhs_c; } if (lhs_c == '\0') { return 0; } } } enum { BufferSize = 100 }; char buffer[BufferSize]; void putchar_(char c) { for(char* ptr = buffer; ptr - buffer < BufferSize; ptr++) { if (*ptr == '\0') { *ptr++ = c; *ptr++ = '\0'; return; } } } void clear_buffer(void) { for(int i = 0; i < BufferSize; i++) { buffer[i] = '\0'; } } int main(void) { #if PRINTF_ALIAS_STANDARD_FUNCTION_NAMES clear_buffer(); printf("printf'ing an integer: %d and a string: %s\n", 12, "Hello world"); const char* expected = "printf'ing an integer: 12 and a string: Hello world\n"; if (strcmp_(buffer, expected) != 0) { return(-1); } clear_buffer(); sprintf(buffer, "sprintf'ing an integer: %d and a string: %s\n", 34, "quick brown fox"); expected = "sprintf'ing an integer: 34 and a string: quick brown fox\n"; if (strcmp_(buffer, expected) != 0) { return(-1); } #endif return 0; }