What does type safe mean? Why do modern languages not use implicit declarations?
Type safe means that, if possible, data types used in assignments and function calls, etc, are checked for correctness at compile time. This typically saves the programmer a lot of debugging effort. The C programming language is a quite strongly typed language; this means that [data] types, variables and functions must [should!] be declared before their use [see my C overview]. This kind of type safeness is also called static type checking, as opposed to dynamic type checking that is additionally supported by languages such as Java, C++ [optionally, depending on type of cast and compiler flags] and Lisp/CLOS, requiring run time type information.