繁体   English   中英

使用GCC编译.CPP

[英]Compiling a .CPP using GCC

如何使用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 ::?

memcpystrncmp<cstring>中声明, atoiatol<cstdlib> 只需包含这些标头即可引入其声明。

注意事项:

  • 在预处理程序指令(包括#include ""之后不能使用分号。
  • using namespace std; 尤其是没有标题!
    为什么“使用命名空间标准”被认为是不良做法?
  • 由于您正在构建C ++项目,因此请不要忘记通过-lstdc++与标准库链接,或使用g++其转发给您的链接器。

请注意,使用GCC,您不必在标准C函数之前加上std:: :(因为它们也在全局命名空间中声明),但是无论如何,您都应该使代码符合标准。

cplusplus网站可以提供帮助。 如果您搜索特定的函数,则在顶部会找到要编译的代码的必要参考:

http://www.cplusplus.com/reference/cstdlib/atol/

您甚至可以签入URL。 在这种情况下,您需要“ cstdlib”。

关于编译器,有几种可用的方法,g ++是一个不错的选择。

我还建议创建一个使构建过程自动化的makefile,因为随着代码库的增长,它变得很麻烦。

对于您在代码中使用的任何库函数,请阅读该函数的手册页以查看哪个标头声明了该标头,然后在使用该函数的任何源文件中将该标头包含#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>

我收到很多错误: memcpyatoiatolstrncmp等,

memcpystrncmp<cstring>中声明。 atoiatol<cstdlib> (如果使用C而不是C ++进行编程,则位于<string.h><stdlib.h>中)。

并且一定要使用g++命令而不是gcc命令来编译C ++源代码。 它们都调用相同的编译器(如果源文件名以.cpp结尾,则gcc编译C ++代码),但是g++命令添加了C ++所需的一些选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM