GRPC C STYLE GUIDE

Background

Here we document style rules for C usage in the gRPC Core library.

General

  • Layout rules are defined by clang-format, and all code should be passed through clang-format. A (docker-based) script to do so is included in tools/distrib/clang_format_code.sh.

Header Files

  • Public header files (those in the include/grpc tree) should compile as pedantic C89

  • Public header files should be includable from C++ programs. That is, they should include the following:

    #ifdef __cplusplus
    extern "C" {
    # endif
    
    /* ... body of file ... */
    
    #ifdef __cplusplus
    }
    # endif
    
  • Header files should be self-contained and end in .h.

  • All header files should have a #define guard to prevent multiple inclusion. To guarantee uniqueness they should be based on the file's path.

    For public headers: include/grpc/grpc.h --> GRPC_GRPC_H

    For private headers: src/core/channel/channel_stack.h --> GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_STACK_H

C99 Features

Comments

Within public header files, only /* */ comments are allowed.

Within implementation files and private headers, either single line // or multi line /* */ comments are allowed. Only one comment style per file is allowed however (i.e. if single line comments are used anywhere within a file, ALL comments within that file must be single line comments).

Symbol Names

  • Non-static functions must be prefixed by grpc_
  • static functions must not be prefixed by grpc_
  • enumeration values and #define names are uppercased, all others are lowercased
  • Multiple word identifiers use underscore as a delimiter (NEVER camel casing)