头文件可以在主类中运行.这怎么可能?

Header files can run in main class. How is that possible?

本文关键字:运行 怎么可能 文件      更新时间:2023-10-16

当我使用C编程时,这是正常的include方法是

#include<stdio.h>
int main()
{
printf("Hello World");
return 0;
}

Output: Hello World

现在我试图将我的#include放入我的主类中,并且它完美运行,没有任何错误或警告。

int main()
{
#include <stdio.h>
printf("Hello Worldn");
return 0;
}

Output: Hello World

我已经用C++尝试过这种方法。我不能在那里做那种活动,它给了我很多错误。

为什么只有C有这种技术?
这怎么可能?

如图所示,内部cdefs.h__BEGIN_DECLS定义为

#ifdef        __cplusplus
#define __BEGIN_DECLS        extern "C" {
#define __END_DECLS        }
#else
#define __BEGIN_DECLS
#define __END_DECLS
#endif

__BEGIN_DECLS用于stdio.h,如下所示

对于C++__BEGIN_DECLS扩展到extern "C",链接规范应该在全局范围内,而不是在main

我相信你有很多好奇心。

我对C相对问题只有一个想法

首先,您需要了解compile process

简而言之,compile process中有 4 个主要(我称之为助手(助手

在您的代码中,位于 main 函数中的#include<stdio.h>运行良好,因为第一个名叫Preprocessor的人。

Preprocessor通常会替换或让其他助手知道您的functionvariables的位置

例如

#define TRUE 1

如果在代码中将TRUE定义为1,则预处理器会将所有TRUE替换为1

众所周知,printf()的位置在<stdio.h>

如果您想具体了解,请在终端中运行gcc -E main.c。 我建议你不要把#include<stdio.h>放在printf()之后

c++ 标头(与 c 标头相对(定义命名空间(std 等(,如果包含在任何函数的主体中,则会触发错误(命名空间定义必须出现在文件范围或立即出现在另一个命名空间定义中(。