小编Mic*_*son的帖子

C11 _Generic:如何处理字符串文字?

使用_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)

获得这个编译的唯一方法(据我所知)是:

  1. 将字符串文字转换为适当的类型.这是丑陋的(在我看来)首先打破了这一点_Generic.
  2. 使用char[14]的类型说明符.你一定在开玩笑吧......

我的假设是数组在传递时会衰减到指针_Generic,但显然不是.那么,如何我用_Generic用字符串文字?那是唯一的两种选择吗?

我在Debian上使用clang 3.2.不幸的是,它是我访问过的唯一支持此功能的编译器,所以我不知道它是否是编译器错误.

c clang c11

25
推荐指数
3
解决办法
2611
查看次数

如何将xlib和OpenGL模块与python一起使用?

我知道可以和GLX一起使用Xlib和OpenGL(我自己在C中完成了).

问题是,我如何在python中执行此操作?该OpenGL模块具有GLX功能[ 文档 ],但它似乎使用C类型,我不知道(也没有,似乎是其他人)如何使用PyOpenGL的xlib类型.

我也试过ctypes直接使用和加载库,但在尝试使用Xlib头文件中定义的C宏时遇到(明显的)问题,比如DefaultRootWindow.

我错过了一些明显的东西,比如PyOpenGL有自己的xlib实现,或者如果没有一些(编译的)模块编写,这是不可能的?

python x11 opengl xlib

9
推荐指数
1
解决办法
1379
查看次数

"不支持mov"GCC内联汇编程序

在使用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)

c optimization gcc inline-assembly

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

标签 统计

c ×2

c11 ×1

clang ×1

gcc ×1

inline-assembly ×1

opengl ×1

optimization ×1

python ×1

x11 ×1

xlib ×1