未调用的静态c函数会发生什么

时间:2015-02-11 09:22:58

标签: c compilation linker

如果您有这样的事情:

int _tmain(int argc, _TCHAR* argv[]) {
    int i;
#if (num>99)
    i = func();
#else
    i= func2();
#endif
    return 0;
}

static int func()
{
    return 1;
}
static int func2()
{
    return 2;
}

根据num是大于还是小,可以合理地从运行时代码中删除99以太funcfunc2吗?

或者我是否还需要在#if中嵌入函数来实现这一目标?

3 个答案:

答案 0 :(得分:2)

这取决于链接器,死代码对链接器的具体要求是什么。 您还应该在#if下包含函数定义,以确保它不会导致机器代码。

答案 1 :(得分:1)

这取决于优化级别。在linux上你可以自己检查一下 readelf -s ./a.out | grep func2

但我认为您使用的是Windows,因此您需要一些类似的工具http://www.pe-explorer.com/

以下是工具列表:Any tool/software in windows for viewing ELF file format?

答案 2 :(得分:1)

您还需要在#if中嵌入函数定义以实现目标。

代码可能是这样的:

假设变量“num”正在填充表单配置。

int _tmain(int argc, _TCHAR* argv[]) {
    int i;
#if (num>99)
    i = func();
#else
    i= func2();
#endif
    return 0;
}

#if(num>99)
static int func()
{
    return 1;
}
#else
static int func2()
{
    return 2;
}
#endif

希望它有所帮助。谢谢!