Tag: gcc

覆盖C库函数,调用原始函数

我对这段代码的工作方式和原因感到有些困惑。 在我参与的任何项目中,我实际上没有遇到过这种情况,我甚至都没想过要自己做。 override_getline.c: #include #define OVERRIDE_GETLINE #ifdef OVERRIDE_GETLINE ssize_t getline(char **lineptr, size_t *n, FILE *stream) { printf(“getline &lineptr=%p &n=%p &stream=%p\n”, lineptr, n, stream); return -1; // note: errno has undefined value } #endif main.c中: #include int main() { char *buf = NULL; size_t len = 0; printf(“Hello World! %zd\n”, getline(&buf, &len, stdin)); return 0; } […]

模仿/模仿C中的大端行为?

我想知道是否有可能模仿一个大端行为,用于测试目的? 通过Windows或Linux,mingw或gcc。 这是一个代码示例,我希望仿真返回大端: #include #include #include #include #if CHAR_BIT != 8 #error “Unsupported char size for detecting endianness” #endif int main (void) { short int word = 0x0001; char *byte = (char *) &word; if (byte[0]) printf(“little endian”); else printf(“big endian”); return 0; }

重新定义typedef

我可能做错了,这是一个很大的问题,为什么它在一个编译器中工作而不是另一个编译器。 我有一个大型的C应用程序,我试图遵循不包括其他头文件中的头文件的样式。 相反,使用前向声明; 因此我正在尝试以下方面。 // in Ah typedef struct A_ A; typedef struct B_ B; struct A_ { double a; B *b; }; // in Bh typedef struct B_ B; struct B_ { int c; }; // in Ch typedef struct A_ A; typedef struct B_ B; void function_do_something(A*, B*); // in Cc #include “Ah” […]

为什么树矢量化使这种排序算法慢2倍?

如果在gcc(4.7.2)中启用-fprofile-arcs则此问题的排序算法会快两倍(!)。 该问题的大量简化的C代码(事实certificate我可以用全零来初始化数组,奇怪的性能行为仍然存在,但它使得推理更加简单): #include #include #define ELEMENTS 100000 int main() { int a[ELEMENTS] = { 0 }; clock_t start = clock(); for (int i = 0; i < ELEMENTS; ++i) { int lowerElementIndex = i; for (int j = i+1; j < ELEMENTS; ++j) { if (a[j] < a[lowerElementIndex]) { lowerElementIndex = j; } } int […]

gcc编译错误:cast指定数组类型

以下代码完全有效, int *ia = (int[]){1,3,5,7}; 但是当我编译下一行代码时, char *p = (char[]) “abc”; gcc说 test.c:87: error: cast specifies array type 它们似乎以同样的方式铸造。 为什么第二个得到一个错误的消息? 正如你们所说,“abc”是一个指针,它不能转换为指针。 所以我的另一个问题是:为什么呢 char[] s = “abc”; 已validation。 上面的代码行在编译时如何工作?

将多个C源文件编译为唯一的目标文件

我有一些C源文件,我正在使用gcc 。 我基本上想要编译所有这些并创建一个单个目标文件。 当我尝试: gcc -c src1.c src2.c src3.c -o final.o 我明白了: gcc: cannot specify -o with -c or -S with multiple files 如果我尝试: gcc -c src1.c src2.c src3.c 我得到三个不同的目标文件。 如何告诉gcc编译所有文件以返回单个目标文件(我还想指定其名称)? 谢谢。 也许还有另一种更常见的方法,在这种情况下请告诉我。

在Windows下使用gcc安装gtk并进行编译?

我在c:/ programfiles中安装了gcc(也设置为路径变量),我从http://www.gtk.org/download-windows.html,glib,gtk,pango获得gtk的所有必要文件, atk和cairo。 虽然我不知道如何使用gtk和gcc编译器编译ac程序。 如何设置所有内容以使其有效? (我不知道每个zip文件的位置。?)基本上我真的不知道从哪里开始。

为什么我在这个琐碎的例子中没有得到gcc的“未使用的未初始化”警告?

如何在序列反转程序中修复此分段错误再次出现了一个愚蠢的未初始化变量错误? 。 所以我打算重复“请使用-Wall flags”评论,但是当我测试代码反对警告时,我发现没有任何警告报告给我的惊喜。 所以我把它修改为下面这个(这段代码对于执行目的毫无意义,但它说明了我想要展示的内容): #include int main() { int i,len=12; /* printf(“%d\n”,i); */ while(i!=len-1) { i++; len–; } return 0; } 使用gcc 4.7.3和6.2.1编译时 gcc -Wall -Wextra -pedantic 我没有得到任何警告,而在使用while循环之前, i公然没有初始化。 现在,如果我取消注释printf语句,我得到: warning: ‘i’ is used uninitialized in this function [-Wuninitialized] 那么为什么在将i传递给printf而不是在while测试时发出警告? (不同的gcc没有警告未初始化的变量,因为在我的情况下,没有分支) (听起来像一个小虫,但它是如此微不足道,我想知道我是不是错过了一些巨大的东西。)

如何在GCC,Windows XP,x86中编写缓冲区溢出漏洞?

void function(int a, int b, int c) { char buffer1[5]; char buffer2[10]; int *ret; ret = buffer1 + 12; (*ret) += 8;//why is it 8?? } void main() { int x; x = 0; function(1,2,3); x = 1; printf(“%d\n”,x); } 上面的演示来自这里: http://insecure.org/stf/smashstack.html 但它在这里不起作用: D:\test>gcc -Wall -Wextra hw.cpp && a.exe hw.cpp: In function `void function(int, int, […]

静态链接ncurses到程序

我有一些问题静态地将ncurses链接到我的一个程序 这是一个非常简单的示例程序: #include int main(){ initscr(); printw(“Hello world\n”); refresh(); getch(); endwin(); return 0; } 当我用它编译它 gcc -static -lncurses hello_curses.c -o curses 我收到这些错误: /tmp/ccwHJ6o1.o: In function `main’: curses_hello.c:(.text+0x5): undefined reference to `initscr’ curses_hello.c:(.text+0x14): undefined reference to `printw’ curses_hello.c:(.text+0x1b): undefined reference to `stdscr’ curses_hello.c:(.text+0x20): undefined reference to `wrefresh’ curses_hello.c:(.text+0x27): undefined reference to `stdscr’ curses_hello.c:(.text+0x2c): undefined reference to […]