是否有一个工具将C源文件作为输入,内联所有函数并输出另一个C源文件?
所有函数都包含在一个文件中,并且没有递归/ gotos。函数不一定具有inline
属性。
如果此工具忽略标准库中声明的函数(例如printf
,malloc
和sqrt
),则可以(实际上是可取的)。
相关问题:link:唯一的答案是错误的。
答案 0 :(得分:1)
那对你没有帮助。至少对于gcc来说,在将文本源代码转换为内部表示之后就会发生内联。
你可以看看这个:
int x;
__attribute__((always_inline)) inline void foobar () { x--; }
int main() {
x = 1;
foobar ();
return x;
}
在此处调用g++ example.cpp -O0 -g -E
将导致:
✓ pan:~$ g++ example.cpp -O0 -g -E
# 1 "example.cpp"
# 1 "/home/meyer//"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "example.cpp"
int x;
__attribute__((always_inline)) inline void foobar () { x--; }
int main() {
x = 1;
foobar ();
return x;
}
但是在使用g++ example.cpp -O0 -g -o example.elf
进行编译时,生成的可执行文件将不再具有函数foobar
。您可以使用objdump -w | less
进行检查,然后与省略属性进行比较。
我使用-O0
来防止任何优化发生,因为大多数编译器应该足够聪明,以确定该函数可以简单地优化为int main () { return 0; }
。
我不知道你是否有尝试做的工具。但我担心你需要一个完整的C ++感知词法分析器/解析器组合,用于C ++ - to-C ++ - 交叉编译器才能在所有情况下正确地执行此操作。