我是C语言编程的新手,所以我尝试了许多不同的东西来尝试熟悉语言.
我写了以下内容:
文件q7a.h:
static int err_code = 3;
void printErrCode(void);
Run Code Online (Sandbox Code Playgroud)
文件q7a.c:
#include <stdio.h>
#include "q7a.h"
void printErrCode(void)
{
printf ("%d\n", err_code);
}
Run Code Online (Sandbox Code Playgroud)
文件q7main.c:
#include "q7a.h"
int main(void)
{
err_code = 5;
printErrCode();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我在makefile中运行以下命令(我使用的是Linux操作系统)
gcc –Wall –c q7a.c –o q7a.o
gcc –Wall –c q7main.c –o q7main.o
gcc q7main.o q7a.o –o q7
Run Code Online (Sandbox Code Playgroud)
输出为3.
为什么会这样?
如果在头文件中初始化一个静态变量(实际上是任何变量),那么如果2个文件包含相同的头文件(在本例中为q7.c和q7main.c),则链接器将给出两次定义的错误相同的var?
为什么不将值5插入到静态var中(毕竟它是静态的和全局的)?
谢谢您的帮助.
我想在Ubuntu上运行一个C/C++程序.
所以起初g++在shell中根本没有工作,所以我使用命令安装它
sudo aptitude update && sudo aptitude install g++
Run Code Online (Sandbox Code Playgroud)
所以它安装了它,当我编写它编译的最简单的程序时
g++ -Wall a.cpp -o d
Run Code Online (Sandbox Code Playgroud)
但是当我尝试执行它时,只是在命令行上写了"d"并声明找不到该命令,但是如果我输入lsshell它会告诉我有一个名为的可执行文件d
很高兴,如果有人可以为我清除事情
我的代码编译并运行,但我被告知这是很成问题的.我不明白我哪里出错了.
而且,声称"char _arrName [2];"并不是错误的.并做作业"_arrName [2] ='\ 0';" ?是不是一个"超出界限"的错误?
#include <iostream>
using namespace std;
class Base {
protected:
char* _name;
public:
virtual ~Base() { cout << "Base dtor of " << _name << endl; };
};
class D1: public Base {
char _arrName[2];
public:
D1() {
_name= _arrName;
_arrName[0]= 'D';
_arrName[1]= '1';
_arrName[2]= '\0';
}
virtual ~D1() { cout << "D1 dtor" << endl; }
};
int main () {
Base* arr[2];
arr[0]= new D1();
delete arr[0];
}
Run Code Online (Sandbox Code Playgroud) 我有两个问题.
有没有人知道什么是hpp文件?为什么有人这样做?
我正在尝试实现一个扩展vector的类
但我想使用所有原始函数并为每个函数添加操作.所以我写道:
#include <iostream>
#include <vector>
#ifndef _MY_PERSONAL_VECTOR
#define _MY_PERSONAL_VECTOR
class PersonalVec: public std::vector<int>{
public:
PersonalVec();
void push_back(const int& Val);
};
#endif
Run Code Online (Sandbox Code Playgroud)
并在cpp文件中:
#include <iostream>
#include "PersonalVec.hpp"
using namespace std;
PersonalVec::PersonalVec(): std::vector<int>(){
}
void PersonalVec::push_back(const int& Val):vector<int>::push_back(Val){
cout<<"new improved vector";
}
Run Code Online (Sandbox Code Playgroud)
所以在函数push_back中我试图调用向量push_back但它不起作用.
任何人有任何想法?