我正在尝试一下gamestudio.我现在正在拍摄射击游戏.我有一个指针指向敌人的阵列.我想要.当敌人被杀时 将他从列表中删除.而且我也想创造新的敌人.
Gamestudio使用名为lite-C的脚本语言.它具有与C相同的语法,并且在他们说的网站上,它可以使用任何C编译器进行编译.它是纯C,没有C++或其他任何东西.
我是C的新手.我通常使用.NET语言和一些脚本语言编程,
我有一个C程序,在程序的某一点上有这个:
system("rm -rf foo");
其中foo是一个目录.我决定,而不是调用系统,最好在代码中执行递归删除.我假设一段代码很容易找到.傻我.无论如何,我最后写了这个:
#include <stdio.h>
#include <sys/stat.h>
#include <dirent.h>
#include <libgen.h>
int recursiveDelete(char* dirname) {
DIR *dp;
struct dirent *ep;
char abs_filename[FILENAME_MAX];
dp = opendir (dirname);
if (dp != NULL)
{
while (ep = readdir (dp)) {
struct stat stFileInfo;
snprintf(abs_filename, FILENAME_MAX, "%s/%s", dirname, ep->d_name);
if (lstat(abs_filename, &stFileInfo) < 0)
perror ( abs_filename );
if(S_ISDIR(stFileInfo.st_mode)) {
if(strcmp(ep->d_name, ".") &&
strcmp(ep->d_name, "..")) {
printf("%s directory\n",abs_filename);
recursiveDelete(abs_filename);
}
} else {
printf("%s file\n",abs_filename);
remove(abs_filename);
}
}
(void) closedir (dp);
} …Run Code Online (Sandbox Code Playgroud) 我是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中(毕竟它是静态的和全局的)?
谢谢您的帮助.
我试图阻止学生代码在分配中运行,并拖延我的测试机器.我试过了
setrlimit(RLIMIT_DATA, r);
Run Code Online (Sandbox Code Playgroud)
哪个r是持有限制的结构.但不幸的是,虽然这个限制停止brk并且sbrk分配,但是C库只是故障转移mmap并保持正确分配.
我也试过了
setrlimit(RLIMIT_AS, r)
Run Code Online (Sandbox Code Playgroud)
并且这会使进程停止,但是这种补救措施太严重了 - 进程无法从ENOMEM错误中恢复,因为代码在遇到NULL返回的值时所进行的调用没有堆栈空间malloc().
我对二进制文件的控制有限,所以如果可以用系统调用,我宁愿这样做.但我需要一些方法来限制分配,而不会破坏流程的恢复能力.有没有人有建议?
更新:我找到了一个名为failmalloc的东西,但它不是很复杂,虽然我可以导致它失败,但我总是遇到gdb无法诊断的段错误.
进一步更新:我发现setrlimit(RLIMIT_AS, r) 它似乎做我想要的工作,至少在被不相关的模块中发生的故障之后引起了某些情况下,该段错误.除非有人想出一些有趣的东西(或保留问题的理由),否则我可能会删除这个问题.
当在web上浏览项目的源代码时,我发现returnmain中的一些声明对我来说很奇怪:
int main()
{
/* ... */
return 0x1;
}
Run Code Online (Sandbox Code Playgroud)
所以主要是回归0x1 radix 16,但那是1 radix 10!不应该主要回归0?
那是不对的,对吗?顺便问一下好吗return 0x0?
我总是发现有些人(大多数来自印度)正在使用turbo C.我找不到任何理由使用这种过时的编译器...但我不知道在试图告诉他们使用现代编译器时给出的理由是什么( GCC,MSVC,...).
我一直在搜索网站,寻找最适合初学者游戏开发的语言.许多人说基于C的语言,其他人则建议Python.
通常我会选择一个,但这是我的困境.我不确定这是否正确,但我从这里的程序员那里读到C渲染速度要快得多,而Python则不然.然后人们发布支持声明Python可以在3d渲染方面表现出色.
我也不知道.
我目前的目标是制作一款类似于暴雪暗黑破坏神II的游戏.
我有PHP,JavaScript框架和纯SQL的经验.此外,我在Mac环境中工作,并且可以访问Windows XP.
尽管如此,我应该从哪里开始,为什么?
干杯
编辑新问题
好吧,这对我来说都是压倒性的.如果我忽略了任何事情,请原谅我.我一直在查看Unity 3d和XNA,但这些主要是与.NET Framework一起使用的游戏引擎,主要是C#?
如果我想完全在OS X上进行所有开发,但是为多个平台编译,这是最佳选择吗?
我最近看了一个样本面试问题:
编写一个函数将整数转换为字符串.假设您无权访问库函数,即itoa()等...
你会怎么做?
我有下面的代码,这里只显示了它的一部分,我正在检查文件的类型.
struct stat *buf /* just to show the type buf is*/
switch (buf.st_mode & S_IFMT) {
case S_IFBLK: printf(" block device\n"); break;
case S_IFCHR: printf(" character device\n"); break;
case S_IFDIR: printf(" directory\n"); break;
case S_IFIFO: printf(" FIFO/pipe\n"); break;
case S_IFLNK: printf(" symlink\n"); break;
case S_IFREG: printf(" regular file\n"); break;
case S_IFSOCK: printf(" socket\n"); break;
default: printf(" unknown?\n"); break;
}
Run Code Online (Sandbox Code Playgroud)
问题:st_mode当我做printf("\nMode: %d\n",buf.st_mode);结果时获得的值是33188.
我用常规文件类型和符号链接测试了我的程序.在这两种情况下,输出都是"常规文件",即符号链接情况失败,我不明白为什么?