我的用例:我有两个c语言文件:ApplicationCode.c
和UserCode.c
。应用程序代码是由我的应用程序生成的,UserCode可供应用程序用户使用,他可以在那里编写自己的代码。ApplicationCode.c
在内部使用UserCode.c
并调用其方法/函数。
这里可以假设ApplicationCode.c
永远不会有任何错误,但可能会有gcc编译器生成的警告。UserCode.c
既可以有错误也可以有警告。所以,在编译代码时,我想首先向用户展示他的代码错误。如果需要显示警告,那么只显示由他的代码生成的警告,而不是来自ApplicationCode.c
的警告(因为我不想公开我的ApplicationCode.c
的代码)。这里还有一个约束,我想在这里将返回类型警告显示为错误,为此我使用了-Werror=return-type
参数。
因此,我正在考虑以下三种方法来做到这一点:
-
如果我能够禁用所有警告并仅启用
-Wreturn-type
在这里提出了一个严重的问题 -
如果我能够指示gcc(或重定向)只将错误消息发送到stderr并停留在stdout上。为此也在这里提出了一个严重的问题
-
如果我能够从
ApplicationCode.c
文件禁用所有警告(默认启用),并为UserCode.c
启用所有-Werror=return-type
我试着到处搜索,但没有找到以上3个问题的任何解决方案。请告诉我如何实现上述问题,或者是否有其他更好的方法来解决我的用例?
更新1:这是我的两个代码文件,看起来像
ApplicationCode.c
#include <stdio.h>
// some headers
// some application specific code
int testUserFunction(); // user function declaration
int main(int argc, char *a[]) {
int result = testUserFunction(); // calling user function
// some logic to use and evaluate result
}
用户代码.c
#include<stdio.h>
int testUserFunction(int input1)
{
// user will write his code below this
// user code
}
编译代码的基本命令:
gcc -o code.out ApplicationCode.c UserCode.c
或者是否有其他更好的方法来解决我的用例?
如果您不想"exposeApplicationCode.c";,那么,为什么首先要显示它的编译输出呢?解决方案:在某个秘密的地方编译它,并让用户将其UserCode.c与之链接。