Tag: gcc

单个C代码中的printf和wprintf

在代码中一起使用printf和wprintf函数时遇到问题。 如果首先打印常规字符串,则wprintf不起作用。 如果我先使用wprintf那么printf不起作用。 #include #include #include #include int main() { setlocale(LC_ALL,””); printf(“No printing!\n”); wprintf(L”Printing!\n”); wprintf(L”Wide char\n”); printf(“ASCII\n”); return 0; } 输出: No printing! ASCII 而 #include #include #include #include int main() { setlocale(LC_ALL,””); wprintf(L”Printing!\n”); printf(“No printing!\n”); wprintf(L”Wide char\n”); printf(“ASCII\n”); return 0; } 输出: Printing! Wide char 我在64位Linux 3.0上使用gcc(GCC)4.6.1 20110819和glibc 2.14。

最严格的C代码的GCC选项?

应该设置哪些GCC选项以使GCC尽可能严格? (我的意思是尽可能严格)我在C89写作并希望我的代码符合ANSI / ISO标准。

我有gcc优化错误或C代码问题吗?

测试以下代码: #include #include main() { const char *yytext=”0″; const float f=(float)atof(yytext); size_t t = *((size_t*)&f); printf(“t should be 0 but is %d\n”, t); } 编译它: gcc -O3 test.c GOOD输出应该是: “t should be 0 but is 0” 但是使用我的gcc 4.1.3,我有: “t should be 0 but is -1209357172”

从ANSI C代码获取控制流图

我正在构建用于测试ansi c应用程序的工具。 只需加载代码,查看控制流图,运行测试,标记所有被击中的顶点。 我正在尝试通过解析代码来自己构建CFG。 不幸的是,如果代码嵌套,它会搞砸。 GCC提供从编译代码中获取CFG的能力。 我可能会为其输出编写解析器,但我需要行号来设置断点。 使用-fdump-tree-cfg或-fdump-tree-vcg输出控制流图时,是否可以获取行号?

g ++没有gcc吗?

没有GCC或G ++的G ++编译只是翻译//包括旧的g ++版本。 当我试图从源代码安装g ++我看到文件 gcc.c /* Default prefixes to attach to command names. */ #ifndef STANDARD_EXEC_PREFIX #define STANDARD_EXEC_PREFIX “/usr/local/lib/gcc-” #endif /* !defined STANDARD_EXEC_PREFIX */ //来自g ++ 1.4 * 我知道c ++是c类,我只是想知道g ++是否可以在没有gcc的情况下编译c ++。

警告:逗号的右侧操作数对gcc 4.4.7没有影响

在Linux gcc 4.4.7中,我需要您的帮助以获得以下警告 for (int iLoop1= 0; iLoop1< iLoopN; ++iLoop1, ++iLoop2, !iIsOk) 我在最后一个逗号之后的最后一个参数中发出以下警告 error: right-hand operand of comma has no effect 我已经阅读了逗号运算符的wiki页面,但我不明白问题https://en.wikipedia.org/wiki/Comma_o​​perator 编辑:有效!iIsOk没有做任何我测试以下代码 // Example program #include #include #include int main() { int iIsOk = 0; for (int iLoop1 = 0; iLoop1 < 2; iLoop1++, !iIsOk) { std::cout << "IsOk=" << iIsOk << std::endl; } […]

使用优化时,gcc不包括符号表中的外部变量

我的程序包含许多外部定义的变量。 当我用-O0标志编译它时,我在符号表中看到它们,但是当我使用-O1或-O2时却看不到它们。 如何强制编译器导出它们? foo.c: extern const int my_symbol; void my_fn() { void *x = &my_symbol; // but x is not used, that’s probably why it is optimised out } nm foo.o (with O0): U my_symbol nm foo.o (with O2):

匿名函数返回动态分配的值

编辑 简介:基本上是一个Runner,它接收指向多态工厂方法的指针,该方法被缓存并稍后调用实例化并在事件发生时执行。 为了使事情更容易传达,我创建了一个包含源文件和测试文件的小型隔离项目。 下载 运行make进行编译 运行make test以运行测试 希望这可以帮助。 问题是基于一种设计模式解决方案,在其他语言中很容易实现,但很难在C中实现。缩小的代码如下。 在链接的答案的基础上,我试图找到匿名函数中动态生成的值的解决方案。 摘录答案: int (*max)(int, int) = ({ int __fn__ (int x, int y) { return x > y ? x : y; } __fn__; }); 静态库代码 struct Super{ } void add(struct Super *(*superRef)()) { // cache the reference (in some linked list) // later at some […]

为什么以及gcc如何为gets()发出警告?

while(1) { printf(“\nEnter message : “); gets(message); //Send some data if( send(sock , message , strlen(message) , 0) < 0) { puts("Send failed"); return 1; } //Receive a reply from the server if( recv(sock , server_reply , 2000 , 0) < 0) { puts("recv failed"); break; } puts("Server reply :"); puts(server_reply); } close(sock); return 0; […]

给定堆栈和寄存器的状态,我们可以预测printf的未定义行为的结果

以下是类测验的一些简单C代码: #include int main() { float a = 2.3; printf(“%d\n”, a); return 0; } 编译并运行: Apple LLVM版本6.1.0( clang-602.0.53 )(基于LLVM 3.6.0svn) 目标: x86_64 -apple-darwin14.5.0 此代码的输出undefined 。 我试图通过检查调试器附近的内存(gdb中的X命令)来预测输出。 例如,当a的地址是0x7fff5fbffb98 , &a附近的上下文如下: 0x7fff5fbffb98: 1075000115 0x7fff5fbffb9c: 0 0x7fff5fbffba0: 1606417336 0x7fff5fbffba4: 32767 0x7fff5fbffba8: -1754266167 0x7fff5fbffbac: 32767 0x7fff5fbffbb0: -1754266167 0x7fff5fbffbb4: 32767 然后printf的输出是1606417352 。 我知道使用不正确的说明符时的输出是未定义的。 出于好奇,我预计这个未定义行为的输出与正在运行的堆栈或寄存器的某些内存有关,但我还没弄清楚如何关联它。 那么使用哪个地址或寄存器来设置这个printf的输出? 换句话说,给定运行堆栈的状态以及来自所有寄存器的所有值,我们可以预测(如果是这样)这种未定义行为的输出吗?