是否可以确定是否已在单独的c文件中定义宏?

时间:2015-10-08 22:44:58

标签: c macros

我有两个c文件。不使用任何其他文件,是否可以确定是否已在c文件中的c文件中定义了一个宏?在单个c文件中,这可以通过

实现
#ifdef myMacro

我正在编写评分脚本,希望能够确定学生是否在他/她的提交中定义了特定的宏。显然,我可以打开学生.c文件并迭代它以查看它是否已定义。但是,我想知道是否有更优雅的解决方案。

3 个答案:

答案 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,那么您将不会检测到他们可能在代码中更早地定义了宏。