Tag: clang

C:关于结构可见性的警告

我有一个复杂的C项目。 在文件message.h我声明了这个结构 struct message { int err; struct header { char *protocol_version; char *type; long int sequence_number; } header; struct body { int num_tag; char *tag_labels[LEN]; int num_attr_tag[LEN]; char *attr_labels[LEN][LEN]; char *attr_values[LEN][LEN]; char *attr_types[LEN][LEN]; } body; }; 在文件“castfunctions.h”中,我包含文件“message.h”,我声明函数“setClientNat” #include void *setClientNat(struct message *msg); 当我编译时,我有这个警告 castfunctions.h:warning: declaration of ‘struct message’ will not be visible outside of […]

计算数组的数量

如何在C程序中计算数组的总数? LLVM IR中的数组声明对应于alloca类型的操作。 所以 int a[10]; 对应于 %a = alloca [10 x i32], align 4 在LLVM IR中。 但我也注意到了 int j = 0; 也对应于alloca指令 %j = alloca i32, align 4 那么如何计算仅对应数组的alloca指令数? 编辑: for (Function::iterator i = F.begin(), e = F.end(); i != e; ++i) { for (BasicBlock::iterator ii =(*i).begin(), ii_e = (*i).end(); ii != ii_e; ++ii) […]

使用clang在Mac上的FFMPEG项目中包含时出错

我在运行remuxing.c示例代码时遇到问题。 我收到以下错误。 我已确认可以在/usr/local/include找到这些文件。 我正在运行macOS Sierra 10.12.6。 $ cc -v playground/remuxing.c Apple LLVM version 9.0.0 (clang-900.0.39.2) Target: x86_64-apple-darwin16.7.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin “/Library/Developer/CommandLineTools/usr/bin/clang” -cc1 -triple x86_64-apple-macosx10.12.0 -Wdeprecat ed-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-v erifier -discard-value-names -main-file-name remuxing.c -mrelocation-model pic -pic-level 2 -mthread-mo del posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-cpu penryn -target -linker-version 305 -v -dwarf-column-info […]

在LLVM中为变量使用特定寄存器

我正在写一个修改LLVM bitcode的LLVM传递。 对于一个变量,我希望它使用寄存器,比如x86上的R15。 如何在生成机器代码时指示LLVM使用此寄存器? 这可以在bitcode级别指导吗?

什么是AST,CFG,CLANG,我们如何在死码去除算法中使用它?

我将使用C语言为我们的团队编写一个用于在线事件的死代码删除算法。 要求是…… 读取C程序源文件,其中包含多种forms的死代码。 我们的输出应该是一个文件,它没有任何死码。 在浏览互联网时,我们遇到了SO链接…… 我怎么知道代码中的哪些部分从未使用过? 传统C / C ++项目中的死代码检测 在看到这些链接之前,我们有了基本的想法……使用普通文件流逐行读取输入C文件并存储在字符串数组中。 然后分析这些字符串并确定非常基本的死代码,如if(0)和if(1)等。并制作一个堆栈,用于维护括号。 还有更多…… 但这有一个很大的问题,这个想法将引导我们用字符串操作做更多事情,而不是删除死码。 但看到这些链接后…我们开始了解Clang库,抽象语法树,控制流图等… 但我们对这些图书馆和那些概念都是新手。 我们开始知道它们用于解析C代码。 因此,我们需要一些关于AST,CFG和一些基本指导的基本想法,解释我们如何在我们的代码中使用它… 我们可以将clang库作为像math.h这样的普通库包含在内吗? 我们在哪里可以下载该库? 我们可以在Windows中使用那些Clang库吗?

为什么前缀增量(++ x)比C中的后缀增量(x ++)更快?

可能重复: C ++中的i ++和++ i之间是否存在性能差异? 我听说它说前缀增量比C中的后缀增量要快。这是真的吗?为什么? ++ x vs x ++

将2D数组传递给相应的指针参数有什么问题?

前几天我在C大学做了一些矩阵计算,我开始使用5×5矩阵,所以我把它硬编码到源代码中。 这是一个二维的二维数组,如: /** * This is the probability-matrix for reaching from any profile * to another by randomly selecting a friend from the friendlist. */ static const double F[5][5] = { /* P , F , L , A , S */ /* Peter */ {0 , 0.5 , 0.5 , 0 , 0 }, […]

正确的位移给出错误的结果,有人可以解释

我正在向-109右移-109,我期望-3,因为-109 = -1101101(二进制)右移5位-1101101 >> 5 = -11(二进制)= -3 但是,我得到-4而不是。 有人可以解释什么是错的吗? 我使用的代码: int16_t a = -109; int16_t b = a >> 5; printf(“%d %d\n”, a,b); 我在linux上使用了GCC,并在osx上使用了相同的结果。

如果至少没有使用-O2,则clang链接器会失败

我在一个简单的C代码中有一个strage行为,我正在为教育目的而做。 如果我使用低于-O2的值编译它,它会在链接版本中使用此输出中断。 $ make clang -Wall -march=native -pipe -c -g -D_DEBUG_ main.c clang -Wall -march=native -pipe -c -g -D_DEBUG_ functions.c clang -Wall -o main main.o functions.o Undefined symbols for architecture x86_64: “_getbit”, referenced from: _getValueFromMatrix in functions.o “_setbit”, referenced from: _populateMatrix in functions.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed […]

K&R练习1-16 clang – getline的冲突类型

我正在使用K&R,使用Clang作为我的编译器。 使用Clang编译时,练习1-16会产生“getline’的冲突类型”错误。 我猜是因为其中一个默认库有一个getline函数。 在编写K&R练习时,我应该向Clang传递哪些选项以避免包含任何其他内容? 要修改的运动样本是: #include #define MAXLINE 1000 int getline(char line[], int maxline); void copy(char to[], char from[]); /* print longest input line */ main() { int len; /* current line length */ int max; /* maximum line lenght seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest […]