跳到主要内容

OpenEmber C++ 编程风格指南

总体原则

  • 风格统一优先于个人习惯
  • API 可读性优先
  • 命名应清晰表达语义,而不是实现细节

命名规范

类型(类 / struct / enum)

使用 PascalCase 大驼峰命名法,例如:

class EmberClient;
struct PacketHeader;
enum class ConnectionState;

函数(统一规则)

lowerCamelCase(小驼峰命名法,类似 Qt)

void connectToServer();
void sendPacket();
int calculateChecksum();
  • 不区分 public / private
  • 不使用 PascalCase(避免 Google 风格复杂性)

getter / setter(统一 camelCase)

int packetCount() const;
void setPacketCount(int count);

bool isConnected() const;
  • 和函数完全一致
  • 避免 Google 那种“例外规则”

变量

局部变量 / 参数

int packetCount;
std::string deviceName;

成员变量

m_ 前缀 + camelCase

class Client {
private:
int m_packetCount;
bool m_connected;
};

全局变量

int g_packetCount;

常量

PascalCase(不使用 k 前缀)

const int MaxPacketSize = 1024;

宏(仅限必要场景)

#define EMBER_MAX_BUFFER 1024

文件命名

snake_case(蛇形命名法)

ember_client.h
packet_parser.cpp
connection_manager.h

原因:

  • 跨平台(Linux / Windows)
  • 避免大小写问题

类设计规范

一个类只做一件事

class PacketParser;   // 只负责解析
class Connection; // 只负责连接

API 命名要“像句子”

client.connectToServer();
client.sendPacket(data);
client.disconnect();

避免:

client.DoConnect();
client.HandlePacket();

bool 命名规则(非常重要)

bool isConnected();
bool hasError();
bool canRetry();

不要:

bool connected();   // 不清晰

枚举

enum class ConnectionState {
Disconnected,
Connecting,
Connected,
};
  • PascalCase
  • 不加前缀(避免 STATE_CONNECTED

命名禁忌

不要混用风格:

get_packet_count()   // ❌
GetPacketCount() // ❌
packetCount() // ✅

不要使用无意义缩写:

pktCnt   // ❌

不要用类型前缀(老式匈牙利):

int iCount;   // ❌