鱼C论坛

 找回密码
 立即注册
查看: 4196|回复: 7

mplayer代码的一点疑惑

[复制链接]
发表于 2012-11-18 11:21:44 | 显示全部楼层 |阅读模式
10鱼币
#ifndef DISABLE_MAIN
int main(int argc, char *argv[])
{
}
这是main函数 前面的DISABLE_MAIN 没有被定义 如何编译通过可以执行?
这是mplayer的代码中间省略

最佳答案

查看完整内容

源代码改为:(加上第一行) #define DISABLE_MAIN #ifndef DISABLE_MAIN int main(int argc, char *argv[]) { } //... #endif 或者可以在IDE里进行设置预定义DISABLE_MAIN
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-18 11:21:45 | 显示全部楼层
源代码改为:(加上第一行)
#define  DISABLE_MAIN
#ifndef DISABLE_MAIN
int main(int argc, char *argv[])
{
}
//...
#endif
或者可以在IDE里进行设置预定义DISABLE_MAIN
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-18 13:23:54 | 显示全部楼层

我是在疑惑 这个代码是怎么编译通过的 我是从mplayer的源代码包里找的  应该不用更改源代码就可以安装在linux上啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-11-18 18:54:42 | 显示全部楼层
粘帖个文章给你看
gcc编译的时候提供了预定义功能,参数是-D,  通过man gcc可以了解更多:
-D name
           Predefine name as a macro, with definition 1.

       -D name=definition
           Predefine name as a macro, with definition definition.  The contents of definition are tokenized and processed as if they appeared during translation phase three in a #define directive.  In particular, the definition will be truncated by embedded new-line characters.

可以通过以下例子解释一下:
int main()
{
    #ifdef HELLO
    printf("HELLO defined\n");
    #else
    printf("HELLO not define\n");
    #endif

    return 0;
}
在该程序中,判断是否已经定义了宏DEBUG,从而输出相应的语句。
如果编译该程序时采用了gcc -DHELLO, 则输出:HELLO defined
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-18 19:10:47 | 显示全部楼层
仰望天上的光 发表于 2012-11-18 18:54
粘帖个文章给你看
gcc编译的时候提供了预定义功能,参数是-D,  通过man gcc可以了解更多:
-D name

#ifndef DISABLE_MAIN  //如果不存在 预定义 DISABLE_MAIN 编译下面的代码
这样如果存在 岂不是不存在main函数了?(linux下的程序应该还是从main开始的啊) 这样就通不过了吧 这个预定义不就没用了吗?
求解释
还有有没有啥好的建议 我看mplayer的代码总量27M 看的头痛啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-11-18 20:44:40 | 显示全部楼层
584768970 发表于 2012-11-18 19:10
#ifndef DISABLE_MAIN  //如果不存在 预定义 DISABLE_MAIN 编译下面的代码
这样如果存在 岂不是不存在m ...

gcc里的-D选项就相当于前面在代码中手动定义某个量,从代码看,只有-D DISABLE_MAIN你上面的那段main函数才会执行。不过从字面意义上看,你是不是少帖了一些代码,全部代码应该是:
#ifndef DISABLE_MAIN
int main(int argc, char *argv[])
{
}
#else
int main(int argc, char *argv[])
{
}
#endif
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-11-18 20:45:24 | 显示全部楼层
这样会根据是否-D  DISABLE_MAIN来决定调用哪个main函数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-18 21:08:46 | 显示全部楼层
仰望天上的光 发表于 2012-11-18 20:44
gcc里的-D选项就相当于前面在代码中手动定义某个量,从代码看,只有-D DISABLE_MAIN你上面的那段main函数 ...

它就是这么写的所以我才奇怪啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-16 08:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表