关于在C++中使用#include预处理器指令

About Use of #include Preprocessor Directive in C++

本文关键字:#include 预处理 处理器 指令 C++      更新时间:2023-10-16

我在使用g++编译器的C++中偶然发现以下编译错误:

error on line line 1 with message:
invalid preprocessing directive #a

(在字符a上方有一个插入符号),后面是第4行的另一个错误,可能是后续错误,消息为:

cout was not declared in this scope. 

我使用的编辑器是带mingw的代码块10.05。我尝试从iostream文件include语句中删除.h扩展名;在不同的文件编码选项之间切换;用单引号和双引号代替尖括号。我被卡住了。如果它是重复的,请原谅(尽管我已经问了几个相关的问题)。以下代码说明了问题:

#‪include ‬<iostream.h>
int main()
{
cout<< "abc"+8;
cout<< "def"+4;
cout<< "ha";
return 0;
}

cout存在于命名空间std

所以要么

#‪include‬<iostream>
//...
std::cout << "abc" << 8;
//...

#‪include‬<iostream>
using namespace std;
//...

#‪include‬<iostream>
using std::cout;
//...

如果我只使用一次或两次,我倾向于选择第一个;如果我使用了一个命名空间中的许多不同片段(并且仅在cpp文件中),则选择第二个;或者如果我只在使用一个命名空间的片段或2,但多次使用同一对片段,则使用第三个。

此外,正如评论中所说,不要在标题中使用第二个。参见:";使用名称空间";在c++头文件中

此外,您的#include中有一个无效字符。你可以在十六进制编辑器中看到它,或者注意stackoverflow如何不一样地突出显示它们:

#‪include‬<iostream>
#include<iostream>

完全工作代码:

#include<iostream>
using std::cout;
int main()
{
    cout << "abc" << 8;
    cout << "def" << 4;
    cout << "ha";
    return 0;
}

在我更正尝试将8添加到char* 后,生成以下输出abc8def4ha

您必须使用std::cout,这意味着"cout"关键字是标准库的一部分。

"无效指令"错误是由#include指令中的一些不可见的Unicode字符引起的;也许你是从一个在代码中嵌入了一些格式化字符的网站上复制的。如果你在十六进制编辑器中查看源代码,你可以在问题中看到它们。应该通过删除并重新键入#include行来修复该错误。

你可能会有其他错误,因为代码已经过时15年了;大多数现代编译器不提供预标准库。如今,标准库头没有.h扩展名:

#include <iostream>

并且他们声明的几乎所有名称都在std命名空间内:

std::cout << "ha";

最后,"abc"+8没有做任何合理的事情。字符串文字是一个由四个字符组成的数组,+8试图为您提供一个指向第九个字符的指针,但该字符并不存在。其结果是未定义的行为。

如果你想打印"abc"然后是"8",那么你需要:

std::cout << "abc" << 8;

试着这样使用它:-

#‪include ‬<iostream>
using std :: cout;

coutstd库的一部分

如果在a上方有插入符号,请尝试重新键入#include。您可能不小心键入了备选方案i,它看起来很相似,但代码不同。关于std::的建议只与您收到的第二个错误相关。我也不完全理解你试图用"abc"+8来实现什么。