【问题标题】:GCC: How to customising warning and errors generated from compilationGCC:如何自定义编译产生的警告和错误
【发布时间】:2021-05-09 14:45:50
【问题描述】:

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

你可以在这里假设ApplicationCode.c 永远不会有任何错误,但可能会有 gcc 编译器生成的警告。 UserCode.c 可以同时出现错误和警告。 因此,在编译代码时,我想向用户展示他的代码错误作为第一要务。如果还需要显示警告,则仅显示由他的代码生成的警告,而不是来自ApplicationCode.c(因为我不想公开我的ApplicationCode.c 的代码)。 这里还有一个限制,我想在这里将返回类型警告显示为错误,为此我使用-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
}

用户代码.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 

【问题讨论】:

  • 回复。 "As i don't want to expose my ApplicationCode.c's code"——但他们正在编译它。如果他们没有可用的文件,他们是如何做到的?
  • @G.M.请检查更新

标签: c++ c gcc return-type gcc-warning


【解决方案1】:

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

如果您不想“公开 ApplicationCode.c”,那么为什么要首先显示其编译输出?解决方案:在某个秘密的地方编译它,让用户将他们的 UserCode.c 与它链接起来。

【讨论】:

  • @AayushJain 您可以将您的模块编译成用户需要链接的库。这个库甚至可以包含main()。这样,您可以通过将其分成模块(如果适用)来增强您的源代码。
  • 如何保存已编译的 Application.c 文件?如果我只是使用gcc -o code.out ApplicationCode.c 编译,那么它会给出undefined reference to `testUserFunction' 的错误
  • @thebusybee @eerorika 你的评论对我帮助很大。我在编译时使用了 -c 开关:首先我运行 gcc -c ApplicationCode.c -w 然后 gcc -c code.out UserCode.c ApplicationCode.o -Werror=return-type 。通过这种方式,我得到了预期的结果。让我知道这是否正确?但只是好奇这是否可以在单个 gcc 命令中完成?
  • AFAIK 您不能在一个命令行中对多个来源应用不同的警告选项。
猜你喜欢
  • 2010-11-28
  • 2014-04-12
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多