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

GCC: How to customising warning and errors generated from compilation

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

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

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

  1. 如果我能够禁用所有警告并仅启用 -Wreturn-type
    为此 here

    提出了一个单独的问题
  2. 如果我能够指示 gcc(或重定向)仅错误消息到 stderr 并保留在 stdout 上。 为此也提出了一个单独的问题 here

  3. 如果我能够禁用 ApplicationCode.c 文件中的所有警告(默认情况下启用)并使用 -Werror=return-type UserCode.c

我尝试到处搜索,但没有找到以上 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
}

UserCode.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 

or if there any other better way to do solve my use case ?

如果你不想“暴露ApplicationCode.c”,那你为什么要首先显示它的编译输出?解决方案:在某个秘密的地方编译它,让用户 link 他们的 UserCode.c 使用它。