小编kay*_*kun的帖子

多个文件中的全局变量

我有两个需要访问公共变量的源文件.做这个的最好方式是什么?例如:

source1.cpp:

int global;

int function();

int main()
{
    global=42;
    function();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

source2.cpp:

int function()
{
    if(global==42)
        return 42;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

变量global的声明是静态的,extern还是应该在两个文件包含的头文件中?

c++

66
推荐指数
2
解决办法
8万
查看次数

中断被阻止的读取

我的程序经历了这样的循环:

...
while(1){
  read(sockfd,buf,sizeof(buf));
  ...
}
Run Code Online (Sandbox Code Playgroud)

read函数在等待输入时阻塞,这恰好来自套接字.我想处理SIGINT并且基本上告诉它在读取时停止读取函数然后调用任意函数.做这个的最好方式是什么?

c linux signals interrupt

14
推荐指数
1
解决办法
1万
查看次数

重新使用stringstream对象的问题

我正在尝试使用安全实践来处理仅在C++中使用数字的输入,因此我使用stringstream对象:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    int first, second;
    string input;

    stringstream sstream;

    cout << "First integer: ";
    getline(cin, input);
    sstream.str(input);
    sstream >> first;

    cout << first << endl; //display user input in integers

    cout << "Second integer: ";
    getline(cin, input);
    sstream.str(input);
    sstream >> second;

    cout << second << endl; //display user input in integers

    getline(cin, input); //pause program

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然而,第二次它似乎给变量'second'一个任意值.这是输出:

First integer: 1
1
Second integer: 2
2293592
Run Code Online (Sandbox Code Playgroud)

如果我声明两个stringstream对象并分别对它们使用它们,它似乎工作正常.这是否意味着我不能以我正在尝试的方式重用stringstream对象?在我的真实程序中,我打算处理来自用户的两个以上输入值,所以我只想确定是否有另一种方式而不是制作多个stringstream对象.我怀疑这是非常重要的,但我在Windows XP上,我使用MinGW作为我的编译器. …

c++ windows

9
推荐指数
2
解决办法
8510
查看次数

链接器标志在错误的地方

我正在尝试使用Autotools来构建我需要与某些库链接的C程序.它只包含一个C源文件.

这是与它相关的Makefile.am:

bin_PROGRAMS=game
game_SOURCES=main.c
game_CFLAGS=`pkg-config --cflags libglfw`
game_LDFLAGS=`pkg-config --libs libglfw`
Run Code Online (Sandbox Code Playgroud)

当我运行make时,它尝试使用以下方法编译它:

gcc `pkg-config --cflags libglfw` -g -O2 `pkg-config --libs libglfw`  -o game game-main.o
Run Code Online (Sandbox Code Playgroud)

但是这是错误的,因为库链接标志必须在最后,否则它将给出有关未定义引用的错误.例如,如果我运行这个:

gcc `pkg-config --cflags libglfw` -g -O2   -o game game-main.o `pkg-config --libs libglfw`
Run Code Online (Sandbox Code Playgroud)

它汇编很好.

我怎样才能使LDFLAGS primary在末尾而不是在中间附加?

autotools

8
推荐指数
1
解决办法
3734
查看次数

在无效的Syskeypress上禁用MessageBeep

简单的问题,如果用户按下Alt + Whatever并且没有与之关联的热键,通常程序将生成MessageBeep.我可以调用哪些API函数来避免这种情况?

处理WM_KEYDOWN,WM_KEYUP,WM_SYSKEYDOWN和WM_SYSKEYUP都返回0; 在我的主要WndProc不起作用.

c++ winapi

6
推荐指数
1
解决办法
1493
查看次数

带数据文件的Autotools

我想使用Autotools分发我的源代码和相关数据文件:

~/foo$ ls -R
.:
conf  configure.ac  dat  Makefile.am  src

./conf:
foo-pref.conf

./dat:
data.dat

./src:
main.c  Makefile.am
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所拥有的.如果没有./conf和./dat子目录,我可以让Autotools为单个可执行文件设置它.但是我想将data.dat安装在$(前缀)/ share和foo-pref.conf中以安装在相应的/ etc目录中.我能做些什么来实现这个目标?

autotools

4
推荐指数
1
解决办法
1214
查看次数

游戏文件存档格式

我想创建一个单独的数据文件,其中包含我的游戏所需的所有数据,我希望它能够被压缩.我查看了tar和gzip,但我下载了他们的来源,我不知道从哪里开始.有人可以给我一些指示我如何使用这些吗?

c++

3
推荐指数
1
解决办法
1302
查看次数

C++异常处理问题

1)为方便起见,我将整个程序放在try块中.这样我就可以在代码中的任何一点抛出异常,并知道它将以相同的方式处理.随着程序变得更大,这种技术会导致性能下降吗?

2)如果在超出范围时取消分配对象,为什么抛出临时对象有效?例如:

class Error : public std::exception  
{
  private:
    char *m;
  private:
    Error(char *l) : m(l) {}
    virtual char *what()
    {
      return m;
    }
};

int main()
{
  try
  {
    throw Error("test");
  }
  catch(std::exception &e)
  {
    puts(e.what());
    return -1;
  }
  return 0;
}

在throw语句中,为什么临时对象不会变为无效,因为它只在try范围中声明?

3)对于非英语语言的Windows操作系统,what()STL异常类的成员是否仍会返回char*字符串?或者它可以返回一个wchar_t*字符串?

c++ winapi

3
推荐指数
1
解决办法
786
查看次数

开放线程安全吗?

两个线程同时调用open()可以吗?如何找到这个问题的答案?

假定调用不同的文件上进行操作,他们的标志可以O_RDONLY,O_WRONLY或者两者兼而有之.

c libc thread-safety

3
推荐指数
1
解决办法
2990
查看次数

在缓冲区内取消引用

假设我有一个指向包含这些值的缓冲区的char指针(十六进制):

12 34 56 78 00 00 80 00
Run Code Online (Sandbox Code Playgroud)

我想将最后两个字节修改short为42 的值.所以我认为我必须做这样的事情:

(short)*(pointer+6)=42;
Run Code Online (Sandbox Code Playgroud)

编译器没有抱怨,但它没有做我期望它做的事情.有人能告诉我分配价值的正确方法吗?

c

2
推荐指数
1
解决办法
132
查看次数

标签 统计

c++ ×5

c ×3

autotools ×2

winapi ×2

interrupt ×1

libc ×1

linux ×1

signals ×1

thread-safety ×1

windows ×1