GCC:如何自定义编译生成的警告和错误



我的用例:我有两个c语言文件:ApplicationCode.cUserCode.c。应用程序代码是由我的应用程序生成的,UserCode可供应用程序用户使用,他可以在那里编写自己的代码。ApplicationCode.c在内部使用UserCode.c并调用其方法/函数。

这里可以假设ApplicationCode.c永远不会有任何错误,但可能会有gcc编译器生成的警告。UserCode.c既可以有错误也可以有警告。所以,在编译代码时,我想首先向用户展示他的代码错误。如果需要显示警告,那么只显示由他的代码生成的警告,而不是来自ApplicationCode.c的警告(因为我不想公开我的ApplicationCode.c的代码)。这里还有一个约束,我想在这里将返回类型警告显示为错误,为此我使用了-Werror=return-type参数。

因此,我正在考虑以下三种方法来做到这一点:

  1. 如果我能够禁用所有警告并仅启用-Wreturn-type
    在这里提出了一个严重的问题

  2. 如果我能够指示gcc(或重定向)只将错误消息发送到stderr并停留在stdout上。为此也在这里提出了一个严重的问题

  3. 如果我能够从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与之链接。

最新更新