当用C或C++编码时,我应该在哪里#include?
callback.h:
#ifndef _CALLBACK_H_
#define _CALLBACK_H_
#include <sndfile.h>
#include "main.h"
void on_button_apply_clicked(GtkButton* button, struct user_data_s* data);
void on_button_cancel_clicked(GtkButton* button, struct user_data_s* data);
#endif
Run Code Online (Sandbox Code Playgroud)
callback.c:
#include <stdlib.h>
#include <math.h>
#include "config.h"
#include "callback.h"
#include "play.h"
void on_button_apply_clicked(GtkButton* button, struct user_data_s* data) {
gint page;
page = gtk_notebook_get_current_page(GTK_NOTEBOOK(data->notebook));
...
Run Code Online (Sandbox Code Playgroud)
是否所有包括在.h或.c/.cpp中,或两者都像我在这里做的那样?
Rei*_*ica 144
把尽可能多的东西放在尽可能.c少的地方.h.在该包括.c当一个文件被编译只包括在内,但包括了.h必须由使用它的每一个文件被包括在内.
Joh*_*ode 47
您应该在另一个.h文件中包含标头的唯一时间是您需要访问该标头中的类型定义; 例如:
#ifndef MY_HEADER_H
#define MY_HEADER_H
#include <stdio.h>
void doStuffWith(FILE *f); // need the definition of FILE from stdio.h
#endif
Run Code Online (Sandbox Code Playgroud)
如果标题A依赖于标题B,例如上面的例子,那么标题A应该直接包含标题B. 千万不要尝试来订购包括.c文件来满足相关性(即,包括头A之前头B); 那是一堆胃灼热等待发生的事.我是认真的.我曾经多次参与过这部电影,并且总是以东京的火焰结束.
是的,这可能导致文件被多次包含,但如果它们具有适当的包含防护设置以防止多个声明/定义错误,那么额外的几秒构建时间就不值得担心.试图手动管理依赖项是一个痛苦的屁股.
当然,您不应该包含不需要的文件.
如果我#include <callback.h>,我不想要#include很多其他头文件来编译我的代码.在callback.h你应该包括编译所需的一切.但仅此而已.
考虑在头文件中使用前向声明(例如class GtkButton;)是否足够,允许您减少#include头中的指令数(反过来,我的编译时间和复杂性).