首页 > 解决方案 > 通过基本脚本程序检查 C 语言中是否存在函数

问题描述

我想知道如何通过 bash 脚本编程检查 C 语言程序中是否存在函数。

假设我用 C 语言编写了一个程序:

乐趣.c

void add();
void main() {
  add();
}
void add() {
  printf"hello");
} 

我想通过 bash 脚本检查上述程序功能是否存在?

#!bin/bash ? ? ? ?

标签: cbash

解决方案


您可以创建一个临时文件并在其中使用要检查其存在的函数的行:

#!/bin/bash

cp func.c /tmp/func.c                            # Create temp file
echo "void testAdd() { add(); }" >> /tmp/func.c  # Append test line
gcc /tmp/func.c -o /dev/null                     # Run test

if [ $? -eq 0 ]                                  # Check gcc's exit code
then
  echo "function add() exists"
else
  echo "Can't find add() or other error"
fi

使用-o /dev/nullgcc 的输出被丢弃。当函数存在且没有其他错误时,gcc 应该通过。否则应该返回一条错误消息并且退出代码$?不为零:

func.c:10:18: warning: implicit declaration of function ‘add’ [-Wimplicit-function-declaration]
 void testAdd() { add(); }

但是,必须始终知道函数签名,否则会出现错误:

func.c:10:18: error: too few arguments to function ‘add’
 void testAdd() { add(); }

如果测试不应该依赖于函数签名,则可以使用此测试行:

void testAdd() { void* a = add; }

但是,这里的 add 也可以是全局变量而不是函数。


推荐阅读