为什么这段代码(用 gcc test.c -o test -lSDL2 -Wall -Wextra 编译):
#include <SDL2/SDL.h>
void close() {
printf("HERE\n");
SDL_Quit();
}
int main() {
SDL_Init(SDL_INIT_VIDEO);
return 0;
}
...多次打印“HERE”后导致段错误? close函数是在sdl中定义并在init期间调用的吗?
我在archlinux上编译它,如果我删除关闭函数或重命名它工作正常。
close
是一个标准的POSIX函数,用于关闭打开的文件描述符。通过将函数命名为 close
,您将覆盖该函数。
close
的签名是:
int close(int fildes);
您的函数不匹配(如果匹配,则必须正确复制/包装
close
)。