红联Linux门户
Linux帮助

GCC/G++编译错误,提示:#include expects "FILENAME"

发布时间:2009-09-07 09:56:32来源:红联作者:ly_chaojilong
初次使用GCC/G++,看了 《GCCG++简介_Linux程序设计》,然后根据里边的例子操作了以下。
4.GCC/G++编译实例
当前有两个源文件 main.c 和 factorial.c,现在要编译生成一个计算阶乘的程序(因 int 类
型大小的限制,读者不能输入太大的值)。源代码如下:
// factorial.c 源代码
#include
#include
int factorial (int n) //计算数值 n 的阶乘
{
if(n <= 1)
return 1;
else
return factorial (n - 1) * n;
}
//main.c 源代码
#include
#include
int factorial (int n);
int main (int argc, char **argv)
{
int n;
if(argc < 2) { //要求输入的参数为两个,一个为命令本身,另一个为数值
printf ("Usage: %s \n", argv [0]);
return -1;
}
else{
n = atoi (argv[1]); //将输入的第二个参数(字符类型)转换为数值以便计算
printf ("Factorial of %d is %d.\n", n, factorial (n));
}
return 0;
}

然后在终端中使用 gcc -c 命令编译源代码。
[root@localhost ch0202]# gcc -c main.c

结果编译错误:
[liyang@LYLinux GCC Test]$ gcc -c main.c
main.c:1:10: error: #include expects "FILENAME" or
main.c:2:10: error: #include expects "FILENAME" or
main.c: In function ‘main’:
main.c:9: warning: incompatible implicit declaration of built-in function ‘printf’
main.c:15: warning: incompatible implicit declaration of built-in function ‘printf’
不知道是什么原因。是不是环境搭建的不正确?清高手不吝赐教!
谢谢
文章评论

共有 17 条评论

  1. shenhao0129 于 2009-09-15 18:52:37发表:

    我晕!貌似很多的都是一些很基础的东西的啊

  2. ly_chaojilong 于 2009-09-15 09:04:28发表:

    谢谢大家!

  3. gxylcqx 于 2009-09-10 21:27:20发表:

    [i=s] 本帖最后由 gxylcqx 于 2009-9-11 12:19 编辑 [/i]

    /* aa.c */
    #include
    #include
    int factorial (int n) //计算数值 n 的阶乘
    {
    if(n <= 1)
    return 1;
    else
    return factorial (n - 1) * n;
    }

    #include
    #include
    #include"aa.c"
    factorial (int n);
    int main (int argc, char **argv)
    {
    int n;
    if(argc < 2) { //要求输入的参数为两个,一个为命令本身,另一个为数值
    printf ("Usage: %s \n", argv [0]);
    return -1;
    }
    else{
    n = atoi (argv[1]); //将输入的第二个参数(字符类型)转换为数值以便计算
    printf ("Factorial of %d is %d.\n", n, factorial(n));
    }
    return 0;
    }
    编译运行能通过了,就是#include的问题
    后边不加文件名 ,即使win下的Tc有时都不让过,何况严格按语法标准执行的GCC,有些书不知道怎么回事,忽略这个,
    甚至有些直接就main()了连#include 都不要。。。

  4. amgesty 于 2009-09-09 14:54:02发表:

    不想using namespace std的话在include 头文件就改成 iostream.h

  5. alick 于 2009-09-09 10:42:48发表:

    13# ly_chaojilong


    能。但默认情况下,gcc连接( link) C的库。g++连接C++的库。
    所以对C++程序,g++方便

  6. ly_chaojilong 于 2009-09-09 09:19:20发表:

    我看有些资料介绍了gcc和g++的区别,我理解好像gcc也能编译C++吧。呵呵,我不是太了解,瞎说,谁能给个准确说法??版主??

  7. rgwan 于 2009-09-08 02:16:25发表:

    引用:
    谢谢alick:
    我刚才测试了以下,发现使用c编写的简单测试能通过,而用C++编写的简单测试就不能通过哦。
    c测试代码:
    #include
    int main()
    {
    printf("Hello, world.No Chines.\n");
    }


    C++测试代 ...
    ly_chaojilong 发表于 2009-9-7 11:34

    C++要用g++来编译

  8. ly_chaojilong 于 2009-09-07 14:44:51发表:

    或者:

    #include
    using namespace std;
    int main (int argc,char**argv)
    {
    cout<<"Hello, world!"< return 0;
    }

  9. xiazhouquan 于 2009-09-07 14:23:49发表:

    学习了

  10. ly_chaojilong 于 2009-09-07 13:43:42发表:

    问题解决:
    原因:
    C++ 1998 要求cout and endl被调用使用'std::cout'和'std::endl'格式,或using namespace std;

    修改后:
    #include
    int main (int argc,char**argv)
    {
    std::cout<<"Hello, world!"< return 0;
    }

    编译:g++ -c hello.C
    通过了!!!


    谢谢大家!!!

  11. ly_chaojilong 于 2009-09-07 12:58:52发表:

    同时我在/usr/include/中没有找到iostream.h,在/usr/lib/中也没有找到相关的.so或者.a文件,是不是我的环境中缺少什么文件?请多指教!谢谢。

  12. ly_chaojilong 于 2009-09-07 12:56:47发表:

    谢谢icejoywoo,我按您提供的代码
    修改为:
    #include
    int main ()
    {
    cout << "Hello, world!" << endl;
    return 0;
    }


    但是仍然提示:

    [liyang@LYLinux HeloWord]$ g++ -c hello.C -Wno-deprecated
    hello.C: In function ‘int main()’:
    hello.C:4: error: ‘cout’ was not declared in this scope
    hello.C:4: error: ‘endl’ was not declared in this scope

  13. icejoywoo 于 2009-09-07 12:41:16发表:

    [i=s] 本帖最后由 icejoywoo 于 2009-9-7 12:42 编辑 [/i]

    头文件错了
    c++的头文件是
    #include

    我看搂主需要看基础知识了,c和c++的基础

  14. ly_chaojilong 于 2009-09-07 11:34:59发表:

    谢谢alick:
    我刚才测试了以下,发现使用c编写的简单测试能通过,而用C++编写的简单测试就不能通过哦。
    c测试代码:
    #include
    int main()
    {
    printf("Hello, world.No Chines.\n");
    }


    C++测试代码:
    include
    int main (int argc,char**argv)
    {
    cout << "Hello, world!" << endl;
    return 0;
    }


    结果在C++编译时:
    [liyang@LYLinux HeloWord]$ g++ -c hello.C
    hello.C: In function ‘int main(int, char**)’:
    hello.C:4: error: ‘cout’ was not declared in this scope
    hello.C:4: error: ‘endl’ was not declared in this scope

    不知道时哪里有了问题,请帮忙看下。谢谢!!

  15. freeice 于 2009-09-07 11:19:48发表:

    进来看一下,看能不能帮助。。。

    我也有好多问题。。大家去看一下。能不能帮我解决嘛!!!谢谢!!!

    有空帮我看一下这个问题。。谢谢。。http://www.linuxdiyf.com/bbs/thread-156948-1-1.html

  16. alick 于 2009-09-07 10:23:29发表:

    #include 后面应该有头文件名啊
    我看应该有
    也就是说那两行应该是
    #include
    #include

  17. ly_chaojilong 于 2009-09-07 10:14:15发表:

    有没有帮忙的,自己先顶下!