首页 > TAG信息列表 > include-guards
c – 添加一个包含保护会破坏构建
我将#ifndef ..#define ..#endif添加到我项目的文件中,编译器失败了.一旦我删除它或在定义中添加任何其他名称它编译好.可能是什么问题呢? 听起来像文件已经声明,但我不知道在哪里.我很好,只是删除它,但我真的想知道为什么会发生这种情况. error: expected class-name before ‘{’c – 命名包含警卫
C如何包括通常命名的警卫?我倾向于看到这么多: #ifndef FOO_H #define FOO_H // ... #endif 但是,我认为这不是很直观.在没有看到文件名的情况下,很难分辨出FOO_H的用途及其名称所指的内容. 什么是最佳做法?解决方法:根据我自己的经验,惯例是在包含它们的头文件之后命名包含保护,c – 头部防护装置的用途
在C中,C程序中的头部保护的目的是什么. 从net我发现这是为了防止包含文件一次又一次,但是如何保护头文件保证这一点.解决方法:保护头(或更常规的“包括保护”)是为了防止头文件包含多次的问题;例如 #ifndef MARKER #define MARKER // declarations #endif 该文件第一次是#includC和C中的头部守卫
在LearnCpp.com | 1.10 — A first look at the preprocessor.在Header guards下,有一些代码片段: add.h: #include "mymath.h" int add(int x, int y); subtract.h: #include "mymath.h" int subtract(int x, int y); main.cpp中: #include "add.h" #c – 由于其他可滥用但有用的功能已经标准化,为什么不#pragma一次?
非标准的#pragma once功能几乎在所有C编译器上实现,但C标准排除了它. The usual explanation为什么#pragma once,或者某些语言结构,它执行#pragma曾经做过的,已被排除在C标准之外的是,硬链接和复制的头文件要么会破坏#pragma一次,要么会激发编译器的启发式.公平地说,启发式算法c – 为什么要将整个标题内容放在保护令牌中?
C和C区分声明和定义. 您可以多次声明符号,但只允许您定义一次.通过学习这一点,我有一个想法,将声明放在守卫之外,而守卫内部的定义: // declarations int foo(int x, int y); int bar(int x, int y); extern double something; class X; #ifndef _MY_HEADER_H_ #define _MY_HEA