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

Gcc 编译器怪异问题 求解

    来源: 互联网  发布时间:2016-11-14

    本文导语:  我有4个文件,本来想学习下编译动态库的, 遇到一个很诡异的问题。 往高手解答哦。 test1.h: 内容 #ifndef _TEST1_H_ #define _TEST1_H_ void test1(); #endif test1.c:  内容 #include "test1.h" void test1() {     printf("Fristn"); } test2...

我有4个文件,本来想学习下编译动态库的, 遇到一个很诡异的问题。 往高手解答哦。

test1.h: 内容
#ifndef _TEST1_H_
#define _TEST1_H_
void test1();
#endif

test1.c:  内容
#include "test1.h"
void test1()
{
    printf("Fristn");
}

test2.h:内容
#ifndef _TEST2_H_
#define _TEST2_H_
void test2();
#endif

test2.c:内容
#include "test2.h"
void test2()
{
    test1();
    printf();
}

gcc编译步骤:
gcc -g -c test1.c
gcc -g -c test2.c

为什么 gcc -g -c test2.c 编译会通过呢?test1()函数 他应该没有声明就用了。 而且 我在test2()函数实现的时候 随便写没有声明的函数都会编译通过。 我晕了~ 忘高手解答

|
gcc 语法检查不严格,如果没有声明test1(),它就认为是一个返回值为整数的函数

因为你使用了-c选项,gcc不会生成最终的执行程序,只是一个语法检查
函数的实现在链接阶段才会使用

|
void test2(void) { test1(); }
main() { test2(); }
void test1(void) { }

这样能编译通过,但是有警告
编译器认为第一行中对test1的调用,也就是test1的第一次出现,属于一个隐式声明int test1();
这个声明与后面的test1的函数定义,原型不一致,但是兼容

void test2(void) { test1(); }
main() { test2(); }
char * test1(void) { }
这样就编译错误了,隐式声明与函数原型不兼容

    
 
 

您可能感兴趣的文章:

  • gcc 参数求解
  • 200分求解:程序中同时用到共享库(.so)、静态库(.a),编译时gcc的参数该如何设置?
  • linux x86_64下由于拷贝gcc的lib目录导致gcc编译器出错
  • 使用eclipse 加入arm-elf-gcc 或arm-linux-gcc 编译器为什么不好使
  • 问:关于gcc编译器和g++编译器
  • 求一个编译好的的gcc编译器
  • 编译GCC时能不能只编译C/C++的编译器?
  • 如何安装GCC?没有任何编译器,
  • 问一下有什么方法可以用其它编译器伪装成GCC?
  • 请问我的linux有没有安装gcc编译器等开发工具
  • openSUSE11.2下如何安装gcc编译器
  • 【求助】请问如何替换LINUX中默认的GCC编译器?谢谢!
  • ****求助,关于REDHAT LINUX 9下的GCC编译器问题.............
  • 关于Linux gcc编译器的问题
  • 使用gcc编译器进行代码编译出来的程序是否遵循gpl协议
  • 请问哪有Solaris下的GCC编译器下载??
  • gcc和cc和g++是一个编译器吗?
  • 编译器 GCC for SPARC
  • 求gcc编译器下载???
  • 如何查询Linux系统下是否装了gcc编译器?
  • linux 中没有 gcc编译器 咋混呀!
  • 开源机器学习编译器 Milepost GCC
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • arm-linux-gcc交叉编译出错,但gcc编译没错,什么原因呢???
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • GCC3.4可以编译2.4内核吗 如何查看某版本内核是用哪个版本gcc编译的
  • 使用popen来执行gcc命令,如何根据读出来的gcc的输出来判断gcc是否编译成功?
  • gcc编译时出错,gcc: installation problem, cannot exec `as': 没有那个文件或目录!!!求助呀呀!!!!!
  • 建立较差编译环境,编译gcc-3.4.4出错
  • gcc与arm-linux-gcc编译的问题???
  • Linux下gcc编译时,如何以静态链接的形式编译?
  • Solaris8,安装了iconv,gcc和gcclib,然后用gcc编译c程序出错。
  • 是否必须用同一版本GCC编译内核、应用程序、库甚至GCC自己?
  • GCC编译程序时,有自定义头文件,提示找不到该头文件,但他就在这个目录中,如何设置GCC参数?
  • 为什么g++编译通过了,而gcc却编译通过不了???
  • ubuntu 10.10出现极其诡异的情况,使用gcc编译没任何反应,可以继续输入,但是不提示任何错误;使用make编译效果一样;
  • 求助:当用 gcc 编译时没,加上优化选项 -02 ,可是提示是 gcc: unrecognized option `-02'
  • 关于如何判断gcc之类的编译器的编译结果?
  • 关于在linux交叉编译powerpc-e300c3-linux-gcc的编译问题
  • 我在RedHat中用gcc编译s.c,什么都没产生,也没报错,但是编译a.c的时候就生成可执行文件,这是怎么回事?
  • gcc新手新问题,在windows下有可以编译??
  • 求GCC for redhat不需要编译可以直接安装的
  • gcc与g++对于编译c++程序的区别
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 命令:mips_fp_le-gcc,mipsel-gcc 是什么意思?跟一般的gcc有什么区别?
  • 怎样升级我的GCC呀,我用的RH7.2,GCC 2.96 ,我从网上下载了一个gcc-3.2.3.tar.gz
  • arm-elf-gcc 和 arm-linux-gcc有什么区别?arm-elf-gcc里的elf代表什么?
  • gcc-ccore、avr-gcc及arm-gcc的区别
  • gcc在哪里?bash:gcc:command not found
  • 如何删掉GCC3.0(我需要GCC2.0-----)
  • Windows版GCC TDM-GCC
  • 急问:如何卸掉gcc 3.2庄gcc 2.96
  • 有人遇到过吗,在安装GCC时提示,"checking gcc ...no "
  • GCC无法安装的问题,希望有人帮我( Debian 4.04ra无法安装GCC)


  • 站内导航:


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

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

    浙ICP备11055608号-3