如果c不',我们如何能够使用include指令中的小于号(';&';或甚至大于(';';)呢;不支持运算符重载?
我们都知道c不支持运算符重载。有人能告诉我如果是这样的话,那么我们如何在#include指令和比较中使用小于号?或者所提供的功能被称为其他功能并用语言定义 最常见的例子是C预处理器,它将以“#”开头的行作为指令因为它对底层语言一无所知。。。()如果c不',我们如何能够使用include指令中的小于号(';&';或甚至大于(';';)呢;不支持运算符重载?,c,operator-overloading,c-preprocessor,C,Operator Overloading,C Preprocessor,我们都知道c不支持运算符重载。有人能告诉我如果是这样的话,那么我们如何在#include指令和比较中使用小于号?或者所提供的功能被称为其他功能并用语言定义 最常见的例子是C预处理器,它将以“#”开头的行作为指令因为它对底层语言一无所知。。。() 预处理器不知道“C中的许多符号根据上下文具有不同的含义 例如: *可以表示乘法或指针解引用 这种双重含义使得编写C解析器有点棘手,甚至在代码未编译时提供有用的错误消息更为棘手 请注意,这种双重含义是而不是运算符重载。它们是两个独立的运算符 当涉及到#in
预处理器不知道“C中的许多符号根据上下文具有不同的含义 例如:
*
可以表示乘法或指针解引用
这种双重含义使得编写C解析器有点棘手,甚至在代码未编译时提供有用的错误消息更为棘手
请注意,这种双重含义是而不是运算符重载。它们是两个独立的运算符
当涉及到
#include
指令时,答案是它们是由预处理器处理的。在预处理器步骤之后,
都消失了-该行已被include文件的全部内容所取代。尽管通常我们只是调用类似于gcc file.c
的东西来编译our源文件,尽管我们说我们“编译”,但在幕后发生了很多不同的事情
源文件发生的第一件事是预处理。在您写下源文件时,它会被输入预处理器。预处理器只关心
-开始的行,包括,嗯…\include
一旦预处理器完成了它的工作,所有这些
都将被头.h
的实际内容所取代,这样您的源文件现在才准备好由编译器实际编译。请尝试gcc-E file.c
查看发生了什么
现在C编译器开始运行。它看到的任何
都只是比较运算符
再次说明:
#include
指令用于预处理器,其余指令用于编译器。后者在前者之后工作。运算符由解析器/编译器处理。#include
是一个预处理器指令,它在解析器之前工作,通过它具有不同的语法,预处理器指令不同于逻辑操作符号,预处理器指令用于具有不同语法的预处理器阶段,两者都无法比较此处没有运算符重载。编译器或用户都没有重新定义该运算符。这是一种语法问题,如*
运算符含义取决于上下文,即使没有人重载它,也没有运算符重载f定义当上下文为“this”时,您希望操作员执行不同的操作“。那么它有什么不同呢?请投反对票的人说明你投了什么票?问题出了什么问题?实际上,它知道较少的运算符,并且可以在#if
指令中处理它。通过,它与#include
@myaut是不同的指令,我不同意。它遵循的规则说明了“它是什么样子的?预处理器在处理时是否不知道小于号#include,并且在涉及到#if?困惑!它知道看到它时突然知道它”感谢@noobokay的帮助,但预处理器难道不知道在处理#include directiive时它是一个小于符号吗?在处理#include
指令时,预处理器需要两件事之一;
或“文件名”
。如果它找到了其中一个,那么它将生成一条错误消息。在这个上下文中,它知道
并不意味着“小于”和“大于”。它没有看到“小于”符号,而是在寻找一个角度bracket@PushpinderSinghGrewal预处理器查找预处理器指令(还有其他指令,但它们都以
开头)。当它找到一个指令时,它会根据找到的预处理器指令执行不同的操作。@PushpinderSinghGrewal请参阅#include
预处理器指令的语法示例。
"=" { count(); return('='); }
"==" { count(); return(EQ_OP); }