如何使用GCC编译.c或.cpp文件? 我需要包含一些标准库(fstream,string,iostream) - 我该怎么做?
澄清一下,这里:
#pragma once
#include <iostream>
#include <fstream>
#include <string>
#include"ocgenerator.h";
#include"structures.h";
#include"util.h";
#include"util2.h";
using namespace std;
(我的.h文件与src文件位于同一目录中) 如果我使用命令: gcc src.cpp -o src.o
我收到很多错误:memcpy,atoi,atol,strncmp等,......“未在此范围内声明”。我应该在命令中添加什么?
编辑:或者它是一个范围的东西,我是否必须将std ::添加到所有这些功能?
答案 0 :(得分:1)
memcpy
和strncmp
在<cstring>
,atoi
和atol
<cstdlib>
中声明。只需包含这些标题即可引入其声明。
附注:
#include ""
。using namespace std;
,特别是不在标题中!-lstdc++
与标准库链接,或使用g++
将它转发给链接器。请注意,使用GCC,您不必使用std::
作为标准C函数的前缀(因为它们也在全局命名空间中声明),但无论如何您都应该使代码符合标准。
答案 1 :(得分:0)
cplusplus网站有所帮助。如果您搜索特定的函数,在顶部您将找到编译代码的必要参考:
http://www.cplusplus.com/reference/cstdlib/atol/
您甚至可以登录网址。在这种情况下,您需要'cstdlib'。
关于编译器,有几种可用,g ++是一个不错的选择。
我还建议创建一个makefile来自动化构建过程,因为当你的代码库增长时它会变得很头疼。
答案 2 :(得分:0)
对于您在代码中使用的任何库函数,请阅读该函数的手册页以查看哪个标头声明它,以及#include
任何使用该函数的源文件中的标头
例如,man memcpy
显示memcpy(3)
手册页((3)
引用手册的第3部分;使用man 3 memcpy
指定部分。)
命名强>
memcpy - 复制记忆区域<强>概要强>
#include <string.h>
<强>
void *memcpy(void *dest, const void *src, size_t n);
强>
...
memcpy
是C标准库的一部分,在<string.h>
中声明。对于C ++,您可以使用<string.h>
,但最好使用<cstring>
,它将函数名称放在std
命名空间中。通常,每个标准C头<foo.h>
都被复制为C ++头<cfoo>
。
我收到很多错误:
memcpy
,atoi
,atol
,strncmp
等,
memcpy
和strncmp
在<cstring>
中声明。 atoi
和atol
为<cstdlib>
(或<string.h>
和<stdlib.h>
,如果您使用C而不是C ++进行编程。)
确保使用g++
命令而不是gcc
命令来编译C ++源代码。如果源文件名以gcc
结尾,它们都会调用相同的编译器(.cpp
编译C ++代码),但g++
命令会添加C ++所需的一些选项。