doc/developer.texi: extend and update naming conventions

Bring it up to date with current practice, as the current text does not
cover everything. Drop the reference to unprefixed exported symbols,
which do not exist anymore.
pull/388/head
Anton Khirnov 2 years ago
parent 2d172b89b2
commit 14c6093528
  1. 43
      doc/developer.texi

@ -180,39 +180,50 @@ int myfunc(int my_parameter)
@end example @end example
@section Naming conventions @section Naming conventions
All names should be composed with underscores (_), not CamelCase. For example,
@samp{avfilter_get_video_buffer} is an acceptable function name and
@samp{AVFilterGetVideo} is not. The exception from this are type names, like
for example structs and enums; they should always be in CamelCase.
There are the following conventions for naming variables and functions: Names of functions, variables, and struct members must be lowercase, using
underscores (_) to separate words. For example, @samp{avfilter_get_video_buffer}
is an acceptable function name and @samp{AVFilterGetVideo} is not.
@itemize @bullet Struct, union, enum, and typedeffed type names must use CamelCase. All structs
@item and unions should be typedeffed to the same name as the struct/union tag, e.g.
For local variables no prefix is required. @code{typedef struct AVFoo @{ ... @} AVFoo;}. Enums are typically not
typedeffed.
Enumeration constants and macros must be UPPERCASE, except for macros
masquerading as functions, which should use the function naming convention.
All identifiers in the libraries should be namespaced as follows:
@itemize @bullet
@item @item
For file-scope variables and functions declared as @code{static}, no prefix No namespacing for identifiers with file and lower scope (e.g. local variables,
is required. static functions), and struct and union members,
@item @item
For variables and functions visible outside of file scope, but only used The @code{ff_} prefix must be used for variables and functions visible outside
internally by a library, an @code{ff_} prefix should be used, of file scope, but only used internally within a single library, e.g.
e.g. @samp{ff_w64_demuxer}. @samp{ff_w64_demuxer}. This prevents name collisions when FFmpeg is statically
linked.
@item @item
For variables and functions visible outside of file scope, used internally For variables and functions visible outside of file scope, used internally
across multiple libraries, use @code{avpriv_} as prefix, for example, across multiple libraries, use @code{avpriv_} as prefix, for example,
@samp{avpriv_report_missing_feature}. @samp{avpriv_report_missing_feature}.
@item
All other internal identifiers, like private type or macro names, should be
namespaced only to avoid possible internal conflicts. E.g. @code{H264_NAL_SPS}
vs. @code{HEVC_NAL_SPS}.
@item @item
Each library has its own prefix for public symbols, in addition to the Each library has its own prefix for public symbols, in addition to the
commonly used @code{av_} (@code{avformat_} for libavformat, commonly used @code{av_} (@code{avformat_} for libavformat,
@code{avcodec_} for libavcodec, @code{swr_} for libswresample, etc). @code{avcodec_} for libavcodec, @code{swr_} for libswresample, etc).
Check the existing code and choose names accordingly. Check the existing code and choose names accordingly.
Note that some symbols without these prefixes are also exported for
retro-compatibility reasons. These exceptions are declared in the @item
@code{lib<name>/lib<name>.v} files. Other public identifiers (struct, union, enum, macro, type names) must use their
library's public prefix (@code{AV}, @code{Sws}, or @code{Swr}).
@end itemize @end itemize
Furthermore, name space reserved for the system should not be invaded. Furthermore, name space reserved for the system should not be invaded.

Loading…
Cancel
Save