Question about functions not getting declared

Hello, I'm having a confusing time with functions. I have 2 functions that are declared after the void loop, but one of them doesn't get declared in the void loop function for some reason. Here is the code:

#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define triggerPin 10 #define echoPin 11 #define buttonPin 2 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT); //--------------------------------------------------------------------------------- //variables bool buttonState = HIGH; bool ledState = LOW; void setup() {   Serial.begin(9600);   pinMode (triggerPin, OUTPUT);   pinMode (echoPin, INPUT);   pinMode (buttonPin, INPUT);   digitalWrite(buttonPin, HIGH);   // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally   if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64     Serial.println(F("SSD1306 allocation failed"));     for (;;); // Don't proceed, loop forever   }   display.setTextColor(WHITE); } //--------------------------------------------------------------------------------- void loop() {   printMsg("Press Button to Measure", 1);   while (buttonState == HIGH) {     buttonState = digitalRead(buttonPin);   }   buttonState = HIGH;   Serial.println(buttonState);   display.setCursor(0, 0);   display.println(calcDist());   display.display(); } //----------------------------------------------------------------------------------- void printMsg(String text, int fontSize = 7) {   display.setTextSize(fontSize);   display.setCursor(0, 0);   display.println(text);   display.display(); } float calcDist() {   float bucket = 0, avg = 0, time, distance;   for (int j = 1; j <= 50; j++) {     digitalWrite (triggerPin, HIGH);     delayMicroseconds (10);     digitalWrite (triggerPin, LOW);     time = pulseIn (echoPin, HIGH);     bucket += (time * 0.034) / 2;   }   avg = bucket / 50;   return avg; } 

The function I'm talking about is void printMsg(). calcDist() works fine, but for some reason, printMsg doesnt get declared and I get an error. It's probably something obvious and I'm being dumb, so feel free to explain this to me and/or refer me to some sources about this.

Thanks.

EDIT: Got it fixed by declaring a prototype, but I'm still wondering why didn't Arduino do it for me by itself. Any ideas?

It does a pretty good job of creating prototypes, except when you've got defaults.

TheMemberFormerlyKnownAsAWOL:
It does a pretty good job,except when you've got defaults.

Oh, I see. That's kinda weird, haha.