我对C++比较陌生,我正在上课.我们的班级被分配了一个实验室,我的老师说实验室的写作有点难以理解; 但是,他没有对实验室的记录做任何改动.所以,我遇到了实验室的这一部分:
定义预处理器宏
长期约定大写宏名称,此宏名称必须为TRACE_FUNC.宏有一个参数,当您将宏应用于代码时,该符号将被函数名替换.宏的开头看起来像这样:
Run Code Online (Sandbox Code Playgroud)#define TRACE_FUNC( symbol ) replacement-text`并且预处理器将替换源代码中存在TRACE_FUNC(sym)字符串的替换文本,并将符号提供给该替换.
注意:#define语句必须全部在一条逻辑行上.为了保持长度可管理,您可以在行尾用反斜杠转义换行符; 这将使预处理器保持满意,同时允许您跨越多行的定义.
对于本练习,替换文本必须是完整的语句,包括终止分号.
替换文本必须是输出语句,用于打印符号,后跟调用的text().和标准输出的换行符.您可以复制和修改warning.cpp源文件中的一个输出语句.
warning.cpp只是我们正在使用的文件,TRACE_FUNC它被放置在头文件中.
所以,我读了几遍,我不是百分之百确定它在问什么.从某种角度来看,似乎要求我创建一个名为TRACE_FUNC的宏.如果你以另一种方式看它,它要求我使用宏TRACE_FUNC.所有这一切都很好,但我根本不知道如何使用TRACE_FUNC,我无法在任何地方找到任何文档,我不知道如何创建宏.当我寻求帮助时,我的老师只是说.单词,而不是非常有用的单词,因为它是一个非常曲折,令人困惑的答案,没有解释TRACE_FUNC实际上是什么.
基本上,我老师说的只是内部符号TRACE_FUNC需要是源代码中某个函数的名称.举一个例子,假设我们foo()在警告中有一个函数,那么符号应该是foo()(或foo,我也不确定),从他的解释.此外,在替换文本中,如果我放在#符号前面,显然名称本身将被替换.我认为这应该表示预处理器指令.为什么我应该在这里使用它?
无论如何,做我老师所说的几乎没有任何作用.这条线都没有
#define TRACE_FUNC( foo() ) #foo() called. ;
也不是这一行
#define TRACE_FUNC( foo ) #foo () called. ;
替换任何文本,我很确定是#define指令的操作.因此,我必须以错误的方式应用我的老师所说的内容,但我不知道为什么这是错的或如何解决它.
所以,我的问题.是TRACE_FUNC实际上是一个宏,如果是这样,有它的任何文件,我可以读?或者我应该创作TRACE_FUNC,如果是这样,我该怎么做呢?