Octave has been mainly built with MATLAB compatibility in mind. It has a lot of features in common with MATLAB:
Matrices as fundamental data type.
Built-in support for complex numbers.
Powerful built-in math functions and extensive function libraries.
Extensibility in the form of user-defined functions.
Some of the differences that do exist between Octave and MATLAB can be worked around using "user preference variables."
GNU Octave is mostly compatible with MATLAB. However, Octave's parser allows some (often very useful) syntax that MATLAB's does not, so programs written for Octave might not run in MATLAB. For example, Octave supports the use of both single and double quotes. MATLAB only supports single quotes, which means parsing errors will occur if you try to use double quotes (e.g. in an Octave script when run on MATLAB). Octave and MATLAB users who must collaborate with each other need to take note of these issues and program accordingly.
Note: Octave can be run in "traditional mode" (by including the --traditional flag when starting Octave) which makes it give an error when certain Octave-only syntax is used.
This chapter documents instances where MATLAB's parser will fail to run code that will run in Octave, and instances where Octave's parser will fail to run code that will run in MATLAB. This page also contains notes on differences between things that are different between Octave (in traditional mode) and MATLAB.