小编use*_*331的帖子

将typeof转换为字符串

有没有办法将gcc的typeof扩展名转换为字符串,例如:

#define printType(a) printf("%s", #typeof(a))
Run Code Online (Sandbox Code Playgroud)

所以我可以这样做:

int a = 4;
printf("Type of a is: ");
printType(a);
Run Code Online (Sandbox Code Playgroud)

得到的输出:

Type of a is: int
Run Code Online (Sandbox Code Playgroud)

可能的用法如下:

#include <stdio.h>

#define indirect_print(a) print_##typeof(a)(a)

void print_int(int *i) {
    printf("%d", *i);
}

void print_char(char *c) {
    printf("%c", *c);
}

int main(void) {
    char C = 'C';
    int I = 100;

    {
        char *a = &C;
        indirect_print(a);
    }

    {
        int *a = &I;
        indirect_print(a);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果可能,它应该适用于所有类型,包括结构和联合,而不依赖于手动将每个类型添加到列表.

c gcc typeof

17
推荐指数
2
解决办法
2082
查看次数

OS X 如何使用 OpenGL 上下文创建窗口

不使用多平台库,例如 GLUT 或 SDL。

在 C 中(没有 Objective-C),如何创建一个带有可以绘制的有效 OpenGL 上下文的窗口?

我希望能够从命令行编译它,所以请不要使用 XCode 拖放内容!

c opengl macos

5
推荐指数
1
解决办法
4015
查看次数

列出所有主题

如何在FreeBSD中列出当前进程中的所有线程?或者至少,获取运行的线程数.

我找到了Linux系统调用pstat_getproc,它返回一个包含pst_nlwps线程数的struct .我在FreeBSD上寻找类似的东西.

或者也许有一些类似于/dev/fd线程的东西.

我可以使用任何东西来了解有多少其他线程正在运行.

我希望能够在C中以编程方式执行此操作,而不是使用现有的应用程序.

c unix posix freebsd pthreads

5
推荐指数
1
解决办法
185
查看次数

标签 统计

c ×3

freebsd ×1

gcc ×1

macos ×1

opengl ×1

posix ×1

pthreads ×1

typeof ×1

unix ×1