如果需要将int x与unsigned int y进行比较,这在C99和gcc 4.4+更安全/更好/更好: (unsigned int)x == y x == (int)y 有关系吗?
使用最新的gcc编译器,我还需要考虑这些类型的手动循环优化,还是编译器会为我做好充分的处理?
我写了一个函数,用于缩短请求长度的字符串(单词的句子)。 我不希望句子的剪切恰好在一个单词的中间。 所以我跳过n个字符,直到我到达一个空格并在那里剪切句子串。 我的问题不是一个真正的问题,编译我的函数时会发出一条警告:“警告:未使用计算值”,请参阅代码中的注释行。 该function虽然按预期工作。 所以,无论是我是盲目的,还是我长期坚持我的项目,实际上我不明白这个警告。 有人可以指出我在function上的缺陷吗? char * str_cut(char *s, size_t len) { char *p = NULL; int n = 3; p = s + len; if (p s)) *p = ‘.’; } return s; } 我在开发机器上的编译器是“gcc版本4.2.4(Ubuntu 4.2.4-1ubuntu4)”
是否可以使function静音 ? 例如: #include int function(){ printf(“BLAH!”); return 10; } int main(){ printf(“%d”, silence( function()) ); return 0; } 而不是: BLAH! 10 我会得到: 10 可能吗? 如果积极怎么办呢?
考虑一个大型项目,其中许多类型是typedef ,例如 typedef int age; typedef int height; 和一些函数获取这些类型的参数: void printPerson(age a, height h) { printf(“Age %d, Height %d\n”, a, h); } 有没有办法在编译时警告,如果这些参数是错误的类型,例如 age a = 30; height h = 180; printPerson(h, a); /* No warning, because a and h are both integers */ 在这种情况下,gcc(或某些静态代码分析工具)是否有选项可以发出警告?
我已经为卷积矩阵实现了以下程序 #include #include #define NUM_LOOP 1000 #define N 128 //input or output dimention 1 #define MN //input or output dimention 2 #define P 5 //convolution matrix dimention 1 if you want a 3×3 convolution matrix it must be 3 #define QP //convolution matrix dimention 2 #define Csize P*Q #define Cdiv 1 //div for filter #define […]
使用gcc版本4.3.2时,我看到如何使用以下命令生成规范: $ /usr/local/gcc-4.3.2/bin/gcc -v Using built-in specs 现在更改为与libgcc相同的目录: cd /usr/local/gcc-4.3.2/lib/gcc/x86_64-unknown-linux-gnu/4.3.2 /usr/local/gcc-4.3.2/bin/gcc -dumpspecs > specs 我有一个我可以修改的填充规范文件。 但是,一旦完成,我仍然看到: $ /usr/local/gcc-4.3.2/bin/gcc -v Using built-in specs 我如何告诉gcc默认使用该specs文件而不是强迫我在每次编译时传递一个-specs参数? 我希望它与我拥有的另一个系统匹配,我得到以下内容: $ /usr/local/gcc-4.3.2/bin/gcc -v Reading specs from /usr/local/gcc-4.3.2/lib/gcc/i686-pc-linux-gnu/4.3.2/specs 如您所见,两个系统之间的主要区别在于现有设置是32位,我现在正尝试在64位系统上进行匹配。 Linux的版本是相同的,我正在编译相同版本的gcc。 (两个系统gcc 4.3.2是第二个gcc安装,4.1.2用于编译4.3.2)
我在Windows 7 64位上使用Cygwin下的GCC v4.9.2,但遇到了试图编译uWSGI的问题。 我收到的错误是 – gcc: error: unrecognized command line option ‘-rdynamic’ GCC版本输出 – $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/lto-wrapper.exe Target: x86_64-pc-cygwin Configured with: /cygdrive/i/szsz/tmpp/gcc/gcc-4.9.2-3.x86_64/src/gcc-4.9.2/configure –srcdir=/cygdrive/i/szsz/tmpp/gcc/gcc-4.9.2-3.x86_64/src/gcc-4.9.2 –prefix=/usr –exec-prefix=/usr –bindir=/usr/bin –sbindir=/usr/sbin –libexecdir=/usr/libexec –datadir=/usr/share –localstatedir=/var –sysconfdir=/etc –libdir=/usr/lib –datarootdir=/usr/share –docdir=/usr/share/doc/gcc –htmldir=/usr/share/doc/gcc/html -C –build=x86_64-pc-cygwin –host=x86_64-pc-cygwin –target=x86_64-pc-cygwin –without-libiconv-prefix –without-libintl-prefix –libexecdir=/usr/lib –enable-shared –enable-shared-libgcc –enable-static –enable-version-specific-runtime-libs –enable-bootstrap –enable-__cxa_atexit –with-dwarf2 […]
C11引入了_Thread_local存储类说明符,可以与static和extern存储类说明符结合使用,将变量声明为线程局部。 GNU C编译器套件使用相同的语义实现存储类说明__thread 。 不幸的是我没有找到任何实际实现_Thread_local关键字的编译器(我尝试过gcc,clang和SUN studio)。 我目前使用以下构造来声明关键字thread_local : /* gcc doesn’t know _Thread_local from C11 yet */ #ifdef __GNUC__ # define thread_local __thread #elif __STDC_VERSION__ >= 201112L # define thread_local _Thread_local #else # error Don’t know how to define thread_local #endif 我知道这可能不适用于MSVC和其他编译器。 任何人都可以建议我一个更好的方法来声明thread_local ,使其在尽可能多的编译器中工作吗? 编辑 Christoph建议Microsoft Visual C允许__declspec(thread) 。 这是更新的宏定义: /* gcc doesn’t know _Thread_local […]
我们知道.bss包含未初始化的变量。 如果在c代码中,程序员在使用它们之前初始化变量。 然后.bss在执行C代码之前不必为零。 我对吗? 谢谢