如何在MinGW中安装C正则表达式? 我正在使用它的GCC ……我正在运行Windows XP。 我更喜欢更新的。
我从源代码构建并安装了GCC 4.8.1: $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ./configure –disable-multilib Thread model: posix gcc version 4.8.1 (GCC) 我写了一个简单无用的程序: $ cat hw.c #include void foo() { int a; scanf(“%d”, &a); /* So I can press ctrl+c here. */ printf(“Hello world!\n”); } int main() { foo(); } 现在我编译一下: $ gcc -g […]
好的,这将是一个很长的问题。 我试图理解“缓冲区溢出”是如何工作的。 我正在阅读通过aleph1 粉碎堆栈以获得乐趣和利润 ,并且刚刚获得了以下代码的反汇编: void function(int a, int b, int c) { char buffer1[5]; char buffer2[10]; } void main() { function(1,2,3); } 使用GCC的-S标志的disameembly给了我: .file “example1.c” .text .globl function .type function, @function function: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 subq $48, %rsp movl %edi, -36(%rbp) movl %esi, […]
在我的系统上(Mac OS 10.6) /usr/include/stdarg.h是: /* This file is public domain. */ /* GCC uses its own copy of this header */ #if defined(__GNUC__) #include_next #elif defined(__MWERKS__) #include “mw_stdarg.h” #else #error “This header only supports __MWERKS__.” #endif 那么,如果GCC使用自己的stdarg.h副本,它在哪里呢? 我不知道#include_next意味着什么(可能是GCC扩展?),也不知道“MWERKS”(编译器?)。
我想知道是否有一个GCC C编译器指令允许我确定结构打包的位顺序? 喜欢的东西: #pragma bit_order left 这种需求的基本原理是我有以下结构: struct { union { unsigned char BYTE; struct { unsigned char B0: 1; unsigned char B1: 1; unsigned char B2: 1; unsigned char B3: 1; unsigned char B4: 4; }BIT; }ITEM; } myStruct; 有了这个结构,我希望编译器以这种方式打包: Bit order: | 7 6 5 4 3 2 1 0 | Label: |B0 […]
我正在使用numpy的C API来编写一些用于矩阵计算的函数。 今天我想将我的函数的某些部分移动到一个单独的.c文件中,并使用标头来声明它们。 现在我有一个与numpy的import_array函数有关的奇怪问题。 我试图尽可能地简化问题。 起初有工作计划: mytest.c #include “mytest.h” PyObject* my_sub_function() { npy_intp dims[2] = {2, 2}; double data[] = {0.1, 0.2, 0.3, 0.4}; PyArrayObject* matrix = (PyArrayObject*)PyArray_SimpleNew(2, dims, NPY_FLOAT64); memcpy(PyArray_DATA(matrix), data, sizeof(double) * dims[0] * dims[1]); return (PyObject*)matrix; } static PyObject* my_test_function(PyObject* self, PyObject* args) { return my_sub_function(); } static PyMethodDef methods[] = { […]
我试图摆脱我的程序中的虚假警告。 在Windows 64下(在linux下没有这样的警告)这句话: printf(“%llu”,UINT64_MAX); 生成以下警告: warning: unknown conversion type character ‘l’ in format [-Wformat]| 输出似乎是正确的,警告不应该在那里。 我能找到的最相关的gcc相关post是2008年的这个错误报告http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37768 如果我根据这一点正确理解,这个警告源于这样一个事实:在引擎盖下gcc调用MSVC printf,它不符合C99并且无法理解printf中的unsigned long long格式。 在同一页面上,建议的解决方案是使用名为gnu_printf的东西。 我试图谷歌,但我没有找到包含的标题。 所以问题是如何处理以便携带? 我只是想以正确和非邋way的方式摆脱警告。
GCC是否支持: long long int 这将是一个64位整数? 还有, long long int标准的一部分是什么?
我正在考虑通过gcc查看为primefaces操作生成的一些程序集。 我尝试了以下短序列: int x1; int x2; int foo; void test() { __atomic_store_n( &x1, 1, __ATOMIC_SEQ_CST ); if( __atomic_load_n( &x2 ,__ATOMIC_SEQ_CST )) return; foo = 4; } 看看Herb Sutter关于代码生成的primefaces武器谈话,他提到X86手册要求将xchg用于primefaces存储,并使用简单的mov来进行primefaces读取。 所以我期待的是: test(): .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $1, %eax xchg %eax, x1(%rip) movl x2(%rip), %eax testl %eax, […]
我有几个配置文件,每个配置文件包含一些布尔宏的定义,设置为0或1.然后,在我的代码中,我检查这样一个宏的值,以决定激活代码的哪一部分。 现在是棘手的部分:我想确保包含我的宏定义的标题。 在下面的示例中,如果我忘记包含包含FOO定义的头文件,编译器将打印“world!”,而我希望它生成错误。 //in the configuration header file #define FOO 1 //in a cpp file #if FOO //I would like this to generate an error if I forgot to include the header file #pragma message “Hello” #else #pragma message “world!” #endif 有可能实现这样的行为吗? 怎么样? 为了澄清,我不是问如果没有定义宏,如何生成错误 ,但是如果可以转换#if FOO行,那么同时它会检查布尔值并在FOO生成错误没有定义。 这样做的关键是开发人员会知道他们的代码应该包含 SPECIAL_MACRO(FOO) 同时,检查FOO的布尔值,好像它是#if FOO语句,并防止他们忘记包含定义FOO的头。