当前位置:  技术问答>linux和unix

如何使用gcc和g77编译器众多功能?

    来源: 互联网  发布时间:2016-07-10

    本文导语:  在LINUX操作系统环境下,如何使用gcc和g77编译器众多功能,请大伙指点,请给多一些例子! | google很多嘛~~ | 用法去google差   | gcc的一些扩展 语句表达式  ...

在LINUX操作系统环境下,如何使用gcc和g77编译器众多功能,请大伙指点,请给多一些例子!

|
google很多嘛~~

|
用法去google差  

|
gcc的一些扩展

语句表达式 

  GNU C 把包含在括号中的复合语句看做是一个表达式,称为语句表达式,它可以出现在任何允许表达式的地方,你可以在语句表达式中使用循环、局部变量等,原本只能在复合语句中使用。例如: 

++++ include/linux/kernel.h 
159: #define min_t(type,x,y)  
160: ({ type __x = (x); type __y = (y); __x window_clamp, tcp_full_space(sk)); 

  复合语句的最后一个语句应该是一个表达式,它的值将成为这个语句表达式的值。这里定义了一个安全的求最小值的宏,在标准 C 中,通常定义为: 

#define min(x,y) ((x) s_es; 
101: 
102: if (le32_to_cpu(es->s_rev_level) > EXT2_GOOD_OLD_REV) 
103: return; 
104: 
105: ext2_warning(sb, __FUNCTION__, 
106: "updating to rev %d because of new feature flag, " 
107: "running e2fsck is recommended", 
108: EXT2_DYNAMIC_REV); 

  这里 __FUNCTION__ 将被替换为字符串 "ext2_update_dynamic_rev"。虽然__FUNCTION__ 看起来类似于标准 C 中的 __FILE__,但实际上 __FUNCTION__是被编译器替换的,不象 __FILE__ 被预处理器替换。 

  内建函数 

  GNU C 提供了大量的内建函数,其中很多是标准 C 库函数的内建版本,例如memcpy,它们与对应的 C 库函数功能相同,本文不讨论这类函数,其他内建函数的名字通常以 __builtin 开始。 

  * __builtin_return_address (LEVEL) 

  内建函数 __builtin_return_address 返回当前函数或其调用者的返回地址,参数LEVEL 指定在栈上搜索框架的个数,0 表示当前函数的返回地址,1 表示当前函数的调用者的返回地址,依此类推。例如: 
.
++++ kernel/sched.c 
437: printk(KERN_ERR "schedule_timeout: wrong timeout " 
438: "value %lx from %pn", timeout, 
439: __builtin_return_address(0)); 

  * __builtin_constant_p(EXP) 

  内建函数 __builtin_constant_p 用于判断一个值是否为编译时常数,如果参数EXP 的值是常数,函数返回 1,否则返回 0。例如: 

++++ include/asm-i386/bitops.h 
249: #define test_bit(nr,addr)  
250: (__builtin_constant_p(nr) ?  
251: constant_test_bit((nr),(addr)) :  
252: variable_test_bit((nr),(addr))) 

  很多计算或操作在参数为常数时有更优化的实现,在 GNU C 中用上面的方法可以根据参数是否为常数,只编译常数版本或非常数版本,这样既不失通用性,又能在参数是常数时编译出最优化的代码。 

  * __builtin_expect(EXP, C)  

  内建函数 __builtin_expect 用于为编译器提供分支预测信息,其返回值是整数表达式 EXP 的值,C 的值必须是编译时常数。例如: 

++++ include/linux/compiler.h 
13: #define likely(x) __builtin_expect((x),1) 
14: #define unlikely(x) __builtin_expect((x),0) 
++++ kernel/sched.c 
564: if (unlikely(in_interrupt())) { 
565: printk("Scheduling in interruptn"); 
566: BUG(); 
567: } 

    
 
 

您可能感兴趣的文章:

  • LINUX下使用Eclipse,如何使用交叉编译器?
  • 在redhat9.0下,怎样使用自带的gcc编译器的? 是在终端使用吗? 有这方面的资料么?
  • linux下的C++编译器怎样使用?
  • 使用gcc编译器进行代码编译出来的程序是否遵循gpl协议
  • 各位在Unix下开发,使用哪种c++编译器?
  • 如何使用linux下的java编译器????
  • AIX下gcc编译器怎么使用动态连接库
  • gcc 编译器 有没有 像 vc中使用vc assitant 一样的插件啊
  • 请教使用vim开发的程序员,关于和编译器一起工作的问题
  • 全部安装solaris,还是不能使用cc编译器。
  • 为什么我使用gtk_image_new_from_file()时编译器报错??
  • 为什么新装的Rethat9.0不能使用gcc编译器
  • 如何在linux服务器中使用GCC编译器
  • 使用eclipse 加入arm-elf-gcc 或arm-linux-gcc 编译器为什么不好使
  • 求救!怎么在Solaris9上安装gcc(以前安装的CC过期了,不能使用编译器安装)
  • linux下GCC编译器的安装和使用
  • linux 下如何使用 intel 提供的 c++编译器
  • 参考以下大家使用的 java 环境编译器
  • SunOS5.9 UNIX下使用的是什么编译器啊?
  • 关于使用SDK的编译器时出现的错误提示,请大虾帮我解释一下并给出解决办法。
  • 我使用.net编译通过,但是使用g++编译不能通过。总是提示我undefined reference to ~myclass()
  • ubuntu 10.10出现极其诡异的情况,使用gcc编译没任何反应,可以继续输入,但是不提示任何错误;使用make编译效果一样;
  • PROC开发时 //注释编译不通过 如何设置使用cpp编译。
  • 谁知道如何在i386平台使用交叉编译工具为mips平台编译libtiff啊?
  • 如何使用arm-uclibc-gcc将.c文件编译生成.a,将.c文件编译生成.cgi?
  • 关于大于2G内存的使用.....按32位编译的进程怎么使用大于2G的内存?
  • 在Linux下使用GCC如何编译生成Windows下使用的DLL?
  • 菜鸟问题,小弟刚刚使用LINUX不久,不知道如何使用编程工具进行编译和运行!
  • 别人编译好的交叉编译的工具链,我在自己系统中怎么使用 急
  • 编译内核的后,我的一个类似USB键盘的HID类设备使用不了了,怎么办?
  • 急求,用户程序使用atomic的编译问题!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问在红旗Linux多功能服务器版上(不是数据库服务器版)能否正常安装使用Oracle?红旗Linux数据库服务器版要比红旗Linux多功能服务器版贵
  • RedHat Linux8与9的在使用和功能上有何差别?
  • 如何使用RedHat AS4 中的集群功能?
  • 如何使用shell文件实现linux环境下的挂载功能,具体代码!!
  • 请高人指点,busybox使用不同链接名实现不同功能的原理?
  • 可以使用shell编程完成发送邮件的功能吗?
  • 如何不使用expect而作出expect最简单的功能?
  • C++ I/O 成员 tellp():使用输出流读取流指针 iis7站长之家
  • 如何使用HP的ILO远程功能?
  • LINUX中实现单实例功能使用哪种IPC好啊?
  • 使用python实现strcmp函数功能示例
  • 如何使用UNIX语句来实现这个功能? 高手来看下
  • 请问有没头函数<pthread.h>和<signal.h>里的函数的详细功能介绍?和使用方法???
  • cygwin下使用 service iptables 和ifconfig功能
  • 怎么样使用GPIO的功能?
  • 从sun网站下的solaris Sparc版,有没有功能和使用时间的限制?
  • 使用jms可以实现自己开发的系统中的广播功能吗?各位有没有什么其他的好方法
  • 怎样使用window.open打开窗口并使其兼有submit表单提交的功能!急!
  • c#不使用系统api实现可以指定区域屏幕截屏功能
  • 在使用JDK1.4的正则表达式功能时,发现如果被搜索的字符太多,例如一篇文章.就会报错
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3