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

Is it possible to determine if a macro has been defined in a separate c file?

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

#ifdef myMacro

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

一个更优雅的解决方案是只用一个脚本来完成它,也许 gcc -dM -E 仅在提交的文件上组合,然后对所需的 #define 执行“grepping” ].

我会建议创建一个包含文件来检查它,例如:

-----------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 的文件上生成错误。

这不是最好的解决方案,但它有效

您可以生成一个 C 文件,其中包含学生的 C 程序,例如

#include "student.c"

你的小 C 存根然后可以检查有问题的宏是否已经定义。您可能会出错退出编译(或者如果定义了宏,则选择其他机制):

#ifndef MACRONAME
# error "MACRONAME not defined"
#endif

然后您可以在脚本中测试编译器的错误代码。这种方法不完全证明。如果学生代码的最后一条语句恰好是 #undef MACRONAME 那么您将不会检测到他们可能已经在他们的代码中更早地定义了宏。