首页 > 解决方案 > GCC:如何自定义编译产生的警告和错误

问题描述

我的用例: 我有两个 c 语言文件:ApplicationCode.cUserCode.c. 应用程序代码是由我的应用程序生成的,用户代码可供我的应用程序用户使用,他可以在其中编写自己的代码。 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所有-Werror=return-type UserCode.c

我尝试到处搜索,但没有为上述所有 3 找到任何解决方案。让我知道如何解决上述问题,或者是否有其他更好的方法来解决我的用例?

更新 1: 这是我的两个代码文件的样子

应用程序代码.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 

标签: c++cgccreturn-typegcc-warning

解决方案


或者是否有其他更好的方法来解决我的用例?

如果您不想“暴露 ApplicationCode.c”,那么为什么要首先显示其编译输出?解决方案:在某处秘密编译它,并让用户将其 UserCode.c 与它链接。


推荐阅读