Tag: gcc

链接器错误内联函数

我有一些编译器/链接器错误,我不知道什么是正确的方法来继续。 我遇到这种情况: 啊:在这个文件中定义了一个声明为“inline”的函数,例如:inline void foo1(); bh:在这个文件中定义了一个声明为“inline”的函数,它调用foo1():inline void foo2(); main.c:foo1和foo2()都有一些函数调用。 现在,如果我在ah和bh中声明foo1和foo2作为extern inline void我得到以下错误: prj / src / bo:在函数foo1′: (.text+0x0): multiple definition of :(。text + 0x0):foo1’prj / src / main.o :(。text + 0x0)的foo1′: (.text+0x0): multiple definition of :这里首先定义make: * [kernel]错误1 在我描述的情况下,允许编译和链接而没有错误/警告的方式是什么?

execl的返回值

我正在运行execl函数来通过我的代码编译程序。 我想检查编译是否正确。 所以我写了b = execl(“usr/bin/gcc”,”cc”,path,NULL); 然后检查if( b==-1) 。 但即使汇编中存在错误,它也没有进入if语句。 有什么想法吗? 谢谢! int b=0; if ((pid1 = fork())<0) perror("Error forking"); else { if(pid1==0) b= execl("/usr/bin/gcc","cc",path,NULL); else wait(&status); } if(b==-1) printf("\n——–\n");

来自带有预处理程序指令的c代码的AST

如何从gcc C代码构建AST(抽象语法树)以进行一些转换,如下所示,然后再将代码重新生成(生成)到C语法? if(condition_1){ //lines of code 1 } #ifdef expression_1 else if(condition_2){ //lines of code 2 } #endif 成 bool test = condition_1; if(teste){ //lines of code 1 } #ifdef expression_1 if(!(test) && condition_2){ //lines of code 2 } #endif

无效的静态断言行为

我正在尝试使用GCC v4.3.x设置静态断言(在main函数之外): #define STATIC_ASSERT(cond) extern void static_assert(int arg[(cond) ? 1 : -1]) STATIC_ASSERT( (double)1 == (double)1 ); // failed 但是当我使用浮点数时,断言总是失败。 是否可以正确运行此静态断言?

相互引用的结构

我希望有两个结构可以互相包含。 这是一个例子: struct a { struct b bb; }; struct b { struct a aa; }; 但是这段代码没有编译。 gcc说: test.c:3: error: field ‘bb’ has incomplete type 有没有办法实现这个目标?

GCC 5.1循环展开

给出以下代码 #include int main(int argc, char **argv) { int k = 0; for( k = 0; k < 20; ++k ) { printf( "%d\n", k ) ; } } 使用GCC 5.1或更高版本 -xc -std=c99 -O3 -funroll-all-loops –param max-completely-peeled-insns=1000 –param max-completely-peel-times=10000 部分循环展开,它将循环展开十次然后进行条件跳转。 .LC0: .string “%d\n” main: pushq %rbx xorl %ebx, %ebx .L2: movl %ebx, %esi movl $.LC0, […]

如何在GCC中指定枚举大小?

我想为枚举指定64位的枚举大小。 这怎么可能通过海湾合作委员会? 代码不需要是“可移植的”,因为我只对将代码用于x86-32和x86-64 Linux的GCC编译感兴趣。 这意味着任何可以提供我想要的function的黑客都可以,只要它适用于那些目标。 鉴于此代码: #include #include enum some_enum { garbage1, garbage2 }; int main(void) { enum some_enum some_val; printf(“size: %lu\n”, sizeof(some_val)); return EXIT_SUCCESS; } 这当前打印出4,而我希望能够强制大小为8.尝试在枚举赋值中指定大于4个字节的值会导致警告。 例如, enum some_enum { garbage1 = ‘12345’, garbage2 }; 会产生: warning: character constant too long for its type [enabled by default] 这里对类似问题的回答似乎没有产生任何好结果。 也就是说,由于以下原因产生了相同的警告: enum some_enum { garbage1 = […]

如何为GCC设置Visual Studio代码编译器/调试器?

我在Visual Studio Code中用C编程,但我无法编译,因为VSC只提供了三个内置的编译器–Node.js,C#Mono和Extension开发。 经过一番挖掘后,我遇到了Visual Studio Marketplace 。 这似乎是正确的事情,但只有四种不常见的语言。 我只能假设内置了C调试支持,我无法找到它或者我做错了。 我试图创建一个新的launch.json(似乎保存每个文件的编译/调试设置的清单)并手动输入我拥有的GCC二进制文件,但这并没有结束。 我目前无法通过命令提示符手动编译我正在处理的C源文件。 如果有人能指出我正确的方向,那将会有所帮助。 tl; dr – 在Visual Studio Code中调试C的任何人的帮助 Windows 8,如果重要的话 干杯!

GCC 2.9和“左值作为左侧操作数所需的左值”

我一直在使用void指针并创建了这个例子: #include struct intint { int a; int b; }; struct intshortshort { int a; short b; short c; }; void fill_me(struct intint **pii, void *piss) { (void*)*pii = piss; // Question about this line? } int main() { struct intint *pii = NULL; struct intshortshort iss; iss.a = iss.b = iss.c = 13; fill_me(&pii, […]

如何编译/创建使用c的ruby扩展?

我想创建一个使用c的ruby扩展。 但是当我使用gcc编译它时,我收到此错误: gcc rubyext.c -orubyext -I /usr/local/include/ruby-1.9.1/ In file included from rubyext.c:1: /usr/local/include/ruby-1.9.1/ruby/ruby.h:25:25: error: ruby/config.h: No such file or directory In file included from rubyext.c:1: /usr/local/include/ruby-1.9.1/ruby/ruby.h:107: error: ‘SIZEOF_INT’ undeclared here (not in a function) /usr/local/include/ruby-1.9.1/ruby/ruby.h:108: error: ‘SIZEOF_LONG’ undeclared here (not in a function) /usr/local/include/ruby-1.9.1/ruby/ruby.h:112: error: ‘SIZEOF_VOIDP’ undeclared here (not in a function) In file included […]