标签: c

关于编译器及其工作原理的问题

这是释放单链表的内存的C代码.它是使用Visual C++ 2008编译的,代码可以正常工作.

/* Program done, so free allocated memory */
current = head;
struct film * temp;
temp = current;
while (current != NULL)
{
    temp = current->next;
    free(current);
    current = temp;
}
Run Code Online (Sandbox Code Playgroud)

但是我也遇到过(甚至在书中)相同的代码:

/* Program done, so free allocated memory */
current = head;
while (current != NULL)
{
    free(current);
    current = current->next;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用VC++ 2008编译该代码,程序崩溃是因为我首先释放当前的电流,然后分配current-> current.但显然如果我用其他编译器(例如,书籍作者使用的编译器)编译此代码,程序将起作用.所以问题是,为什么用特定编译器编译的代码工作?是因为编译器将指令放在记住current-> next的二进制文件中,尽管我释放了当前的而我的VC++却没有.我只想了解编译器的工作原理.

c c++ compiler-construction

12
推荐指数
2
解决办法
750
查看次数

linux中进程的堆栈大小是否有限制

stack进程的大小是否有限制Linux?它只是依赖于RAM机器吗?我想知道这一点,以限制函数的递归调用的深度.

谢谢.

c c++ linux

12
推荐指数
3
解决办法
1万
查看次数

使用C设计GUI应用程序的最佳方法是什么?

我总是找到关于这个主题的好教程,但它几乎总是C++.使用C制作GUI应用程序是困难还是没有意义?

一本好书,指南或教程都可以.

平台:Linux

c user-interface

12
推荐指数
2
解决办法
2万
查看次数

如何将WebSockets合并到Cocoa应用程序中

我正在开发一个涉及聊天元素的Cocoa应用程序.我考虑过的一种方法是使用Websockets来处理客户端 - 服务器通信.这将是特别理想的,因为聊天也将显示在网站上,并且使用Websockets可以使实现非常简单.

那么:是否可以使用WebView元素,并在其中使用Websockets?(我知道Safari还不支持Websockets,所以我想这不可能吗?)

如果不这样做,是否有任何用于C,Objective C或我可以在我的应用程序中成功嵌入的任何其他语言的Websocket客户端库?

建议欢迎.

c cocoa objective-c websocket

12
推荐指数
2
解决办法
1万
查看次数

Visual Studio中的#warning

在gcc中我可以做这样的编译时警告:

#if !defined(_SOME_FEATURE_)
   #warning _SOME_FEATURE_ not defined-- be careful!
#endif
Run Code Online (Sandbox Code Playgroud)

但在Visual Studio中,这不起作用.#warning有替代语法吗?

c c++ visual-c++

12
推荐指数
3
解决办法
8675
查看次数

GCC源代码中的C语法

我正在寻找GCC源代码中的C语法,更具体地说是yacc/bison形式的语法.

c grammar gcc yacc bison

12
推荐指数
6
解决办法
9531
查看次数

这段代码会损坏我的处理器吗?

一位朋友发给我这个代码并声称它可能会损坏处理器.真的吗?

void damage_processor() {
    while (true) {
        // Assembly code that sets the five control registers bits to ones which causes a bunch of exceptions in the system and then damages the processor
        Asm(
            "mov cr0, 0xffffffff \n\t"
            "mov cr1, 0xffffffff \n\t"
            "mov cr2, 0xffffffff \n\t"
            "mov cr3, 0xffffffff \n\t"
            "mov cr4, 0xffffffff \n\t"
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

真的吗?

c assembly cpu-registers

12
推荐指数
4
解决办法
3330
查看次数

更改提供给C预处理器宏的参数的大小写

我是C预处理器的新手.是否有可能改变提供给函数的参数的大小写#define?例如,我想写test(size),然后在结果替换中涉及"大小".

c c-preprocessor

12
推荐指数
1
解决办法
2181
查看次数

列出C/C++函数(Unix中的代码分析)

无论我们是维护不熟悉的代码还是检查Apache模块的实现细节,如果我们能够快速遍历代码并构建我们正在查看的内容的概述,它将会有所帮助.Grep服务于我的大部分日常需求,但有些情况下它不会做.

以下是它可以提供帮助的常见示例.要找到我感兴趣的PHP函数的定义,我可以在命令行输入:

grep -r "function myfunc" .
Run Code Online (Sandbox Code Playgroud)

如果我们知道返回类型,这可以很快适应C或C++,但是如果我要列出我的类提供的每个方法,事情会变得更复杂:

grep "function " ./src/mine.class.php
Run Code Online (Sandbox Code Playgroud)

由于没有单个关键字表示C++中的函数或方法,并且因为它通常是更复杂的语法,我认为我需要某种静态代码分析工具,智能使用C预处理器或盲目信任编码器遵循严格的代码指南(空白的数量,curites的位置等)以获得这些结果.

你会推荐什么?

c c++ grep code-analysis

12
推荐指数
4
解决办法
4984
查看次数

gcov和switch语句

我正在使用switch语句在一些C代码上运行gcov.我已经编写了测试用例来涵盖通过switch语句的每个可能的路径,但它仍然报告switch语句中的一个分支未被采用,并且在"至少采取一次"的统计数据中报告的分支小于100%.

以下是一些示例代码:

#include "stdio.h"

void foo(int i)
{
    switch(i)
    {
        case 1:printf("a\n");break;
        case 2:printf("b\n");break;
        case 3:printf("c\n");break;
        default: printf("other\n");
    }
}

int main()
{
    int i;
    for(i=0;i<4;++i)
        foo(i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用" gcc temp.c -fprofile-arcs -ftest-coverage" 构建,运行" a",然后执行" gcov -b -c temp.c".输出指示交换机上的八个分支,一个(分支6)未被占用.

这些分支是什么?我如何获得100%的覆盖率?

c c++ gcc gcov

12
推荐指数
2
解决办法
2602
查看次数