我有两个c文件。不使用任何其他文件,是否可以确定是否已在c文件中的c文件中定义了一个宏?在单个c文件中,这可以通过
实现#ifdef myMacro
我正在编写评分脚本,希望能够确定学生是否在他/她的提交中定义了特定的宏。显然,我可以打开学生.c文件并迭代它以查看它是否已定义。但是,我想知道是否有更优雅的解决方案。
答案 0 :(得分:1)
更优雅的解决方案是使用脚本执行此操作,可能仅对提交的文件gcc -dM -E
组合,然后" grep
ping"对于所需的#define
。
答案 1 :(得分:1)
我建议创建一个包含文件来检查,例如:
-----------verify.h --------------
#ifndef MAGIC_MACRO
#error "MAGIC_MACRO is not defined"
#endif
--------------EOF --------------
然后在每个 .c /.cpp文件的末尾插入一行#include "foldername/verify.h"
例如:在Windows批处理文件中
pushd [src path]
for /F "delims=|" %%i in ('dir /b /s *.c') do (
echo.#include 'verify.h' >> %~dpnxi
)
popd
编译器将在未定义MAGIC_MACRO的文件上生成错误。
这不是最好的解决方案,但它有效
答案 2 :(得分:1)
你可以生成一个 C 文件,其中包含学生的 C 程序
#include "student.c"
您的小 C 存根可以检查是否已定义相关宏。您可以使用错误退出编译(或者如果定义了宏,则选择其他机制):
#ifndef MACRONAME
# error "MACRONAME not defined"
#endif
然后,您可以在脚本中测试编译器中的错误代码。这种方法并不完全是完全证明。如果学生代码的最后一个语句恰好是#undef MACRONAME
,那么您将不会检测到他们可能在代码中更早地定义了宏。