要判断一个代码示例是否符合标准的ODR(One Definition Rule,一次定义规则),需要检查以下方面:
#ifndef
和 #define
。#ifndef MY_HEADER_H
#define MY_HEADER_H
// 头文件内容
#endif // MY_HEADER_H
// 文件1.cpp
int globalVariable; // 正确
// 文件2.cpp
int globalVariable; // 错误,重复定义了全局变量
// 文件1.cpp
void globalFunction() { // 正确
// 函数定义
}
// 文件2.cpp
void globalFunction() { // 错误,重复定义了全局函数
// 函数定义
}
// MyHeader.h
inline void inlineFunction() {
// 函数定义
}
template
void templateFunction(T arg) {
// 函数定义
}
// MyClass.h
class MyClass {
public:
static int staticVariable;
};
// MyClass.cpp
int MyClass::staticVariable = 0;
综上所述,标准的ODR示例应该遵循以上规则,以避免重复定义和违反ODR规则的情况。