使用_GenericC11中的功能,您如何处理字符串文字?
例如:
#include <stdio.h>
#define foo(x) _Generic((x), char *: puts(x))
int main()
{
foo("Hello, world!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在clang上给出了这个错误:
controlling expression type 'char [14]' not compatible with any generic association type
Run Code Online (Sandbox Code Playgroud)
更换char *用char[]给我
error: type 'char []' in generic association incomplete
Run Code Online (Sandbox Code Playgroud)
获得这个编译的唯一方法(据我所知)是:
_Generic.char[14]的类型说明符.你一定是在开玩笑吧......我的假设是数组在传递时会衰减到指针_Generic,但显然不是.那么,如何做我用_Generic用字符串文字?那是唯一的两种选择吗?
我在Debian上使用clang 3.2.不幸的是,它是我访问过的唯一支持此功能的编译器,所以我不知道它是否是编译器错误.
我知道可以和GLX一起使用Xlib和OpenGL(我自己在C中完成了).
问题是,我如何在python中执行此操作?该OpenGL模块具有GLX功能[ 文档 ],但它似乎使用C类型,我不知道(也没有,似乎是其他人)如何使用PyOpenGL的xlib类型.
我也试过ctypes直接使用和加载库,但在尝试使用Xlib头文件中定义的C宏时遇到(明显的)问题,比如DefaultRootWindow.
我错过了一些明显的东西,比如PyOpenGL有自己的xlib实现,或者如果没有一些(编译的)模块编写,这是不可能的?
在使用GCC的内联汇编程序功能时,我尝试创建一个立即退出该过程的函数,类似于_ExitC标准库.
以下是相关的源代码:
void immediate_exit(int code)
{
#if defined(__x86_64__)
asm (
//Load exit code into %rdi
"mov %0, %%rdi\n\t"
//Load system call number (group_exit)
"mov $231, %%rax\n\t"
//Linux syscall, 64-bit version.
"syscall\n\t"
//No output operands, single unrestricted input register, no clobbered registers because we're about to exit.
:: "" (code) :
);
//Skip other architectures here, I'll fix these later.
#else
# error "Architecture not supported."
#endif
}
Run Code Online (Sandbox Code Playgroud)
这适用于调试版本(带-O0),但只要我在任何级别打开优化,我都会收到以下错误:
immediate_exit.c: Assembler messages:
immediate_exit.c:4: Error: unsupported for `mov' …Run Code Online (Sandbox Code Playgroud)