小编Car*_*rez的帖子

如何通过#define指令检测LLVM及其版本?

我认为这个问题很清楚.我正在尝试编写一个编译器检测头,以便能够在应用程序中包含有关使用哪个编译器和哪个版本的信息.

这是我正在使用的代码的一部分:

/* GNU C Compiler Detection */
#elif defined __GNUC__
    #ifdef __MINGW32__
        #define COMPILER "MinGW GCC %d.%d.%d"
    #else
        #define COMPILER "GCC %d.%d.%d"
    #endif
    #define COMP_VERSION __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
#endif
Run Code Online (Sandbox Code Playgroud)

哪个可以这样使用:

printf("  Compiled using " COMPILER "\n", COMP_VERSION);
Run Code Online (Sandbox Code Playgroud)

有没有办法检测LLVM及其版本?和CLANG?

c llvm clang c-preprocessor

62
推荐指数
5
解决办法
3万
查看次数

如何有效地计算C中字符串的长度?

如何有效(及时)计算C中字符串的长度?

现在我正在做:

int calculate_length(char *string) {
    int length = 0;
    while (string[length] != '\0') {
        length++;
    }
    return length;
}
Run Code Online (Sandbox Code Playgroud)

但是与strlen()相比它很慢,例如,有没有其他方法可以做到这一点?

谢谢.

编辑:我在一个独立的环境中工作,我不允许使用任何外部库,包括"string.h".

c string performance

21
推荐指数
4
解决办法
6万
查看次数

如何实现水平调试系统?

按照设计,在我正在工作的环境中,我不能使用调试器来尝试检测错误,所以当我需要调试功能时,我总是输出一些信息.

为此,我做了以下事情:

#ifdef DEBUG
    #define printd(x) printf x
#else
    #define printd(x)
#endif
Run Code Online (Sandbox Code Playgroud)

因此,当我需要打印一些调试信息时,我会使用printd()而不是printf().

我发现的问题是我需要一个水平系统,在确定的调试级别中有一些消息可能很重要,但在调试代码的其他部分时则无关紧要.

所以我的问题是,我如何实现一个水平的调试系统?我重视简单,我的意思是,我更喜欢我的实际系统,而不是在使用它时需要大量代码或混淆代码.类似的东西printd(level, format, ...)会很棒.

c debugging

3
推荐指数
1
解决办法
9302
查看次数

标签 统计

c ×3

c-preprocessor ×1

clang ×1

debugging ×1

llvm ×1

performance ×1

string ×1