我有两个需要访问公共变量的源文件.做这个的最好方式是什么?例如:
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还是应该在两个文件包含的头文件中?
我的程序经历了这样的循环:
...
while(1){
read(sockfd,buf,sizeof(buf));
...
}
Run Code Online (Sandbox Code Playgroud)
read函数在等待输入时阻塞,这恰好来自套接字.我想处理SIGINT并且基本上告诉它在读取时停止读取函数然后调用任意函数.做这个的最好方式是什么?
我正在尝试使用安全实践来处理仅在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作为我的编译器. …
我正在尝试使用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在末尾而不是在中间附加?
简单的问题,如果用户按下Alt + Whatever并且没有与之关联的热键,通常程序将生成MessageBeep.我可以调用哪些API函数来避免这种情况?
处理WM_KEYDOWN,WM_KEYUP,WM_SYSKEYDOWN和WM_SYSKEYUP都返回0; 在我的主要WndProc不起作用.
我想使用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目录中.我能做些什么来实现这个目标?
我想创建一个单独的数据文件,其中包含我的游戏所需的所有数据,我希望它能够被压缩.我查看了tar和gzip,但我下载了他们的来源,我不知道从哪里开始.有人可以给我一些指示我如何使用这些吗?
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*
字符串?
两个线程同时调用open()可以吗?如何找到这个问题的答案?
假定调用不同的文件上进行操作,他们的标志可以O_RDONLY
,O_WRONLY
或者两者兼而有之.
假设我有一个指向包含这些值的缓冲区的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)
编译器没有抱怨,但它没有做我期望它做的事情.有人能告诉我分配价值的正确方法吗?