是否可以确定是否在单独的 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
执行“grep
ping” ].
我会建议创建一个包含文件来检查它,例如:
-----------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
那么您将不会检测到他们可能已经在他们的代码中更早地定义了宏。
我有两个c文件。在不使用任何其他文件的情况下,是否可以确定是否在 c 文件二中的 c 文件一中定义了宏?在单个 c 文件中,这可以通过
#ifdef myMacro
我正在编写评分脚本,希望能够确定学生是否在 his/her 提交中定义了特定的宏。显然,我可以打开学生 .c 文件并遍历它以查看它是否已定义。但是,我想知道是否有更优雅的解决方案。
一个更优雅的解决方案是只用一个脚本来完成它,也许 gcc -dM -E
仅在提交的文件上组合,然后对所需的 #define
执行“grep
ping” ].
我会建议创建一个包含文件来检查它,例如:
-----------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
那么您将不会检测到他们可能已经在他们的代码中更早地定义了宏。