01-06-2023
Правило одного определения (One Definition Rule) (ODR) один из основных принципов языка программирования C++.
Вкратце, положения ODR выглядят так:
Некоторые нарушения ODR могут быть обнаружены компилятором. Остальные, а это в первую очередь касается программ, состоящих из нескольких небольших файлов, пропускаются (программист должен самостоятельно о них позаботиться).
В своей знаменитой книге «Введение в язык C++» Бьёрн Страуструп приводит следующий пример:
// file1.c: int a = 1; int b = 1; extern int c;
// file2.c: int a; extern double b; extern int c;
В данном примере 3 ошибки: a определено дважды (int a; является определением, которое означает int a=0;), b описано дважды с разными типами, а c описано дважды, но не определено. Эти виды ошибок (ошибки компоновки) не могут быть обнаружены компилятором, который за один раз видит только один файл. Компоновщик, однако, их обнаруживает.
Правило одного определения.