Быстрый вопрос относительно условной компиляции (ifndef) - PullRequest
5 голосов
/ 16 мая 2010

Это, наверное, очень глупый вопрос, но я должен быть уверен. Мне дали объявление класса в заголовочном файле, например.

#ifndef file_H
#define file_H

class ex{
private:

public:
};

#endif

и я должен был написать определения методов в том же файле, что я и сделал, мой вопрос: остается ли "#endif" на месте сразу после объявления класса или в конце мой файл после определения метода класса?.

1 Ответ

6 голосов
/ 16 мая 2010

В конце файла.

Целью этой формы этого #ifndef шаблона является предотвращение ситуации, когда одно и то же объявление или определение появляется дважды в единице компиляции.

Это сделано потому, что файл C может содержать несколько файлов H, которые где-то в цепочке могут, в свою очередь, включать один и тот же файл. Если вы просто запустите препроцессор без них, у вас будет несколько копий файла H. Таким образом, у вас есть несколько копий, но препроцессор игнорирует все после первого обращения.

Поскольку вы не должны определять что-либо более одного раза, если вам нужно поместить определения методов в заголовочный файл, поместите их в #endif.

...