我认为这个问题很清楚.我正在尝试编写一个编译器检测头,以便能够在应用程序中包含有关使用哪个编译器和哪个版本的信息.
这是我正在使用的代码的一部分:
/* 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中字符串的长度?
现在我正在做:
int calculate_length(char *string) {
int length = 0;
while (string[length] != '\0') {
length++;
}
return length;
}
Run Code Online (Sandbox Code Playgroud)
但是与strlen()相比它很慢,例如,有没有其他方法可以做到这一点?
谢谢.
编辑:我在一个独立的环境中工作,我不允许使用任何外部库,包括"string.h".
按照设计,在我正在工作的环境中,我不能使用调试器来尝试检测错误,所以当我需要调试功能时,我总是输出一些信息.
为此,我做了以下事情:
#ifdef DEBUG
#define printd(x) printf x
#else
#define printd(x)
#endif
Run Code Online (Sandbox Code Playgroud)
因此,当我需要打印一些调试信息时,我会使用printd()而不是printf().
我发现的问题是我需要一个水平系统,在确定的调试级别中有一些消息可能很重要,但在调试代码的其他部分时则无关紧要.
所以我的问题是,我如何实现一个水平的调试系统?我重视简单,我的意思是,我更喜欢我的实际系统,而不是在使用它时需要大量代码或混淆代码.类似的东西printd(level, format, ...)会很棒.