编译器GCC/CLANG 使用摘记

来源:互联网 发布:如何导入sql文件 编辑:程序博客网 时间:2024/06/06 08:45

[问题]

[解答]


[问题] static和extern的混合用法测试

[解答] 测试结果表明,C代码文件中用static声明的变量,不可以在别的C代码文件中使用extern来引用的。

声明为auto类型(默认auto这个关键词是省略的)的变量,看在别的C代码文件中通过extern来引用的。


[问题] 可以这样获取字符串中的某个字符

[解答] 字符串实际上是匿名字符数组

#include <stdio.h>

int main(int argc, char *argv[])

{

printf("%c\n", "Hello, world\n"[11]); /* 可以这样获取字符串中的某个字符 */

return 0;

}

[问题] 不用加法运算而用实现 变量加 1 功能 C 代码

[解答] 将数转换成数组指针类型的指针,加上一个偏移量

#include <stdio.h>

int _inc1(void *i)

{

char (*p)[3] = (char (*)[3])i;

printf("%d\n",(int)&((*p)[0]));

printf("%d\n",(int)&((*p)[2]));

return (int)&((*p)[1]);

}

int main()

{

printf("%d\n", _inc1((void*)400));

return 0;

}


[问题]

clang++: error: unable to execute command: Killed 

clang++: error: linker command failed due to signal (use -v to see invocation)

[4]: Linking Debug+Asserts executable clang 

clang++: error: unable to execute command: Killed 

clang++: error: linker command failed due to signal (use -v to see invocation)

[解答] memory is not enough to link 加大物理机器的内存,或者加大swap分区

Ref: https://stackoverflow.com/questions/5682854/why-is-the-linker-terminating-on-me-when-i-build-clang/5682962#5682962


[问题] const char* const*p;

[解答] p is a const pointer to a pointer to const char从右到左读这个表达式


[问题] configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.

[解答] 下载地址:

ftp://gcc.gnu.org/pub/gcc/infrastructure/

ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2

ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2

ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz

[问题] 三元运算符"?:"的指令效率是否比if else高呢?

[解答] 是的, 三元运算符作为一个可优化的整体, 优化空间高于if else的两个运算符的组合优化.

test.c : 1 > 2 ? 0: 2; 通过 cc -o test.c, 然后objdump test.o可以比较指令的多寡.



0 0
原创粉丝点击