bf(C++) uses very strict i(type checking). A prototype must be known for each function before it is called, and the call must match the prototype. The program verb( int main() { printf("Hello World\n"); } ) does often compile under bf(C), though with a warning that ti(printf()) is not a known function. Many bf(C++) compilers will fail to produce code in such a situation. The error is of course the missing ti(#include ) directive. Although, while we're at it: in bf(C++) the function ti(main()) em(always) uses the tt(int) i(return value). It is possible to define ti(int main()) without an i(explicit return) statement, but a ti(return) statement without an expression cannot be given inside the tt(main()) function: a tt(return) statement in tt(main()) must always be given an tt(int)-expression. For example: verb( int main() { return; // won't compile: expects int expression } )