我正在做一个涉及大量静态链接的 C 项目。
为了摆脱“隐式函数声明”错误,我将使用一个简单的解决方案——带有函数原型的头文件。
我写了这个脚本:
#!/bin/bash
for file_to_parse in `find -type f -name "*.c"`; do
cproto $file_to_parse > proto.h 2> /dev/null
done
它应该创建一个名为的文件proto.h
并将函数原型存储在其中。
笔记:
find -type f -name "*.c"
此命令返回此脚本目录中所有 c 文件的路径名。
例如./folder1/file1.c
cproto <i>file</i>
=> 这将根据在中找到的函数创建函数原型file
。
例如<code>double myfunction(int a,char b);
问题:
该代码生成一个空文件。
这个 Bash 脚本有什么问题?
答案1
当然,有很多方法可以改变它。这里只是其中之一:
#!/bin/bash
if [ ! -f proto.h ]; then
touch proto.h
fi
for file_to_parse in `find -type f -name "*.c"`; do
cproto $file_to_parse >> proto.h 2> /dev/null
done
错误在于以下cproto...
行中的重定向:简单的方法>
首先擦除目标文件,然后写入。相反,>>
附加到目标文件而不破坏它。循环if
只是为了确保第一次传递时不会附加到不存在的文件:附加到不存在的文件没有任何问题,不会抛出任何错误;只是我想确保它是一个简单的,常规的文件,然后再写入。