对于C++,方括号中的标题必须总是在引号中的标题之上吗
Do bracketed headers have to always be above quoted headers for C++?
编译C++源文件时,如果您有多个由带括号和带引号的标头组成的标头,那么带括号的标头是否必须始终列在第一位?
我把一个带引号的头放在一个带括号的头之前,这开始给我重新定义编译器错误。
头文件(utility.h(是:
#ifndef _UTILITIES_H
#define _UTILITIES_H
#include <vector>
double calcNorm(std::vector <double> array); //template?
#endif
源文件(utilities.cpp(是
#include <math.h>
#include <vector>
#include "utilities.h"
double calcNorm(std::vector <double> array) //template?
{
int n;
double norm = 0;
n = array.size();
for (int i = 0; i < n; i++)
{
norm += array[i]*array[i];
}
norm = sqrt(norm);
return norm;
}
以前,在源文件中,我在括号中的标题上方有#include "utilities.h"
,我得到了以下编译器错误:
g++ -g -Wall -c utilities.cpp
utilities.cpp: In function ‘double calcNorm(std::vector<double>)’:
utilities.cpp:5:8: error: redefinition of ‘double calcNorm(std::vector<double>)’
double calcNorm(std::vector <double> array) //template?
^
utilities.h:3:8: note: ‘double calcNorm(std::vector<double>)’ previously defined here
makefile:12: recipe for target 'utilities.o' failed
编译C++源文件时,如果您有多个由带括号和带引号的标头组成的标头,那么带括号的标头是否必须始终列在第一位?
否。
头文件(在源文件中,以及在其他头文件中(可以是任何顺序。事实上,甚至不需要在源文件的开头包含头文件,只要每个头文件都在依赖于头声明的任何声明之前。在这方面,是使用尖括号还是使用双引号指定路径无关紧要。
从技术上讲,一个头的编写方式可以强制在它之前包含其他头,但这通常是一种糟糕的代码气味,通常是一个错误。
预编译头是一个例外,它是一些编译器实现的非标准功能。预编译的头必须在源文件的任何声明(以及任何其他包含(之前。
嗯。我想我发现了问题。我在目录中有一个名为utilities.h.gch的二进制文件(不确定它来自哪里(。我删除了它,编译器问题就消失了。
啊。gch是预编译头使用的文件扩展名,这解释了为什么您的示例不足以重现您的问题。有关预编译头的行为的更多详细信息,请参阅编译器手册。
"括号内的标题必须总是列在第一位吗"-不。
它与includes的顺序无关,而与如何搜索includes的规则有关。像#include "foo.h"
这样的include语句将导致预处理器首先在源文件的当前目录中查找,然后在您提供的任何include路径(以及默认路径(中查找。像#include <foo.h>
这样的include语句将执行相同的操作,只是它将跳过最初的"在当前目录中查找"步骤。
否。尖括号中的标题和引号中的标题之间的唯一区别是系统将在哪里查找它们。(请注意,标准标头可能根本不作为单独的文件存在;这是一个不需要担心的实现细节。(
简短回答:不。
长话短说:#include
指令几乎是将该文件的内容粘贴到源代码中。在使用其任何功能之前,必须包含标头。时期如果您在末尾包含iostream
,但不使用该标头,则不会有问题
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 对于C++,方括号中的标题必须总是在引号中的标题之上吗
- 库标题在标题中不可见,但在 cmake build 下.cpp文件中完全可见.为什么?
- 为什么我不应该把所有东西都放在标题中?
- WinAPI 检查窗口是否具有常规标题栏
- 如何更改窗体上所有控件的标题?[C++生成器]
- 提升用于解析标题列的精神语法
- 所以我正在为我的学校作业练习继承,但我无法正确实施标题保护
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 使用类 ?C++ 和 SFML 以及标题中的 15 个字符
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 我将如何在 cpp 中生成一个随机且独特的标题
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- 仅提升计时标题与链接
- 是否有理由在标题中保留完全专用的模板?
- 如何在QGroundControl的标题中放置空格?
- 崇高的林特与叮当在标题中找不到头文件
- C++ - 从 MFC 应用程序启动记事本,并将其默认标题从 "Untitled - Notepad" 更改为其他内容
- 无法在 GLFW 窗口标题中显示'ä'
- 只要我不包含一个标题,重新定义C++关键字合法吗