编译器GCC/CLANG 使用摘记
2016-01-06 20:19
543 查看
[问题]
[解答]
[问题]gdb 查看*.core文件的调用栈的方法
[解答]gdb filename firefox.core
backtrace
使用lldb查看*.core文件调用栈的方法
lldb --core firefox.core
backtrace
[问题] 查看gcc/clang 编译器内置宏定义的命令
[解答] cc -E -dM - < /dev/null
[问题] 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可以比较指令的多寡.
[解答]
[问题]gdb 查看*.core文件的调用栈的方法
[解答]gdb filename firefox.core
backtrace
使用lldb查看*.core文件调用栈的方法
lldb --core firefox.core
backtrace
[问题] 查看gcc/clang 编译器内置宏定义的命令
[解答] cc -E -dM - < /dev/null
[问题] 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可以比较指令的多寡.
相关文章推荐
- SSRS 2008 实用小技巧
- 管理表
- css3-定位和浮动
- nodejs 格式化输出字符串
- 关于 0xCCCCCCCC
- Android 耳机驱动知识
- SSRS 2008 分类汇总
- 两亲性分子(Amphiphilic Carbon Molecules,Uva 1606)
- 对高效管理时间的个人观点分享
- 将博客搬至CSDN
- 【LeetCode】LeetCode——第3题: Longest Substring Without Repeating Characters
- Python项目小结
- Jenkins--持续集成变成可能
- POJ 3614 Sunscreen(贪心+优先队列)
- iOS NSURLSession网络请求(get/post/下载)
- oracle如何写一个函数
- Robot Framework与Web界面自动化测试学习笔记:简单例子
- 2015 读书笔记--告诉我你怎样去生活
- liunx常用命令
- mysql删除重复记录语句的方法