Browsed by
标签: C++

6个变态的C语言Hello World程序

6个变态的C语言Hello World程序

下面的六个程序片段主要完成这些事情:

  1. 输出Hello, World
  2. 混乱C语言的源代码

下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。

hello1.c

    #define _________ }
    #define ________ putchar
    #define _______ main
    #define _(a) ________(a);
    #define ______ _______(){
    #define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C)
    #define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)
    #define ____ _(0x72)_(0x6C)_(0x64)_(0x21)
    #define _____ __ ___ ____ _________
    #include<stdio.h>
    _____

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (151 人打了分,平均分: 4.63 )
Loading...
一个C的序列化库tpl

一个C的序列化库tpl

tpl(http://tpl.sourceforge.net/)是一个开源的小项目,其主要是提供一个可以序列化或反序列化C语言数据的一个API函数库。tpl号称是最有效率的也是最快的,它可以把你内存中的数据存放到文件中,并可以在你需要的时候用文件中反序例化到内存变量中。而且这个函数库没有依赖于别的函数库。

下面是一个简单的示例(来源于其主页)

把一个数组(“序号”和“人名”)序例化到文件中。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (11 人打了分,平均分: 3.36 )
Loading...
谁说C语言很简单?

谁说C语言很简单?

前两天,Neo写了一篇《语言的歧义》其使用C语言讨论了一些语言的歧义。大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西。

是的,C语言并不简单,让我们来看看下面这些示例:

  1. 为什么下面的代码会返回0?(这题应该很简单吧)

      int x;
      return x == (1 && x);
    

    本题主要是关于C/C++中变量初始化的问题。

  2. 阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (27 人打了分,平均分: 4.00 )
Loading...
语言的歧义

语言的歧义

语言是人与人相互沟通的途径,而计算机语言则是人和计算机沟通的途径。就算是任何再完美的自然语言都会有歧义,但是又是什么让人和计算计算机间产生了歧义呢?
下面这篇文章来自Gowri Kumar的Puzzle C一文。我做了一些整理,挑选了其中的一些问题,并在之后配上相应的答案(这些答案是我加的,如果需要原版的答案可以直接和本文作者Gowri Kumar联系,作者的联系方式可以从这里得到)。

puzzle 1

此段程序的作者希望输出数组中的所有元素,但是他却没有得到他想要的结果,是什么让程序员和计算机产生歧义?

#include <stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};
int main()
{
    int d;

    for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
        printf("%d\n",array[d+1]);

    return 0;
}

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (27 人打了分,平均分: 4.30 )
Loading...
关于C++构造函数的FAQ

关于C++构造函数的FAQ

下面是一些关于C++构造函数的FAQ。你能回答得出来吗?你可以点链接查看答案,不过是英文版的。他们来自于C++ FAQ Lite。当然,也有中文版的,只可惜中文版的太老了,只更新到了2001年。在C++ FAQ Lite上还有很多关于其它部分的FAQ,大家可以去看看。

[1] 构造函数是用来干什么的?

[2] List x;List x();有什么不同?

[3] 是否一个类的构造函数可以调用另一个构造函数来初始化自己?

[4] 是否Fred类的默认的函数函数就一定是Fred::Fred()?

[5] 如果要创建一个Fred 对像数组,什么样的构数函数会被调用?

[6] 构造函数初始化成员变量时,用 “初始化列表” 还是 “赋值”?

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (5 人打了分,平均分: 2.60 )
Loading...
C语言下的错误处理的问题

C语言下的错误处理的问题

下面是三种C语言的错误处理,你喜欢哪一种?还是都不喜欢?

/* 问题: 不充分,而且很容易出错,前面成功分配的资源,后面出错需要帮助释放 */
int foo(int bar)
{
        int return_value = 0;
        int doing_okay = 1;
        doing_okay = do_something( bar );
        if (doing_okay)
        {
                doing_okay = init_stuff();
        }
        if (doing_okay)
        {
                doing_okay = prepare_stuff();
        }
        if (doing_okay)
        {
                return_value = do_the_thing( bar );
        }
        return return_value;
}

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (8 人打了分,平均分: 3.13 )
Loading...
Linux C 编程一站式学习

Linux C 编程一站式学习

个人认为这是一个挺不错的从C语言到Linux系统开发的教程,这本是两个网上的文档。

  • 其中 一本是《How To Think Like A Computer Scientist: Learning with C++ 》作者Allen B. Downey。原书由Green Tea Press发行,可以从http://www.greenteapress.com/下载到。
  • 另一本是:《Programming from the Ground Up: An Introduction to Programming using Linux Assembly Language》作者Jonathan Bartlett。原书由Bartlett Publishing发行,可以从http://savannah.nongnu.org/projects/pgubook/下载到。

不过非常高兴的是有要把这两个文档都翻译成了中文。当然,翻译工作还没有完全完成,第三部分还很粗糙,错误也有不少,有待改进。第一部分和第二部分已经比较成熟,第二部分还差三章没写。不过现在可以阅读了。

下面是这个文档的网站链接:

http://learn.akae.cn/media/index.html

好烂啊有点差凑合看看还不错很精彩 (11 人打了分,平均分: 3.45 )
Loading...
C++和JAVA传统中积极的一面

C++和JAVA传统中积极的一面

bruceeckel译者注

本文翻译自Bruce Eckel(《Thinking in C++》& 《Thinking in Java》作者)的博文,该博文于2009年03月14日发表于:

http://www.artima.com/weblogs/viewpost.jsp?thread=252441

本文的发表引起了互联网上热烈的讨论,关于讨论大家可以到这里围观。

下面是原文。原名《The Positive Legacy of C++ and Java

摘要:

在最近的讨论中,有些人断定C++并不是一个设计完美的语言。在我在C++标准委员那8年里,我目睹所有关于C++的决议的诞生。我希望本文有助于帮读者理解C++和JAVA的设计选择,从而可以让大家更全面的来看待他们。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (15 人打了分,平均分: 3.53 )
Loading...
C++ 对象的内存布局

C++ 对象的内存布局

07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非常简单的,主要是为了说明一些机理上的问题,也是为了图一些表达上方便和简单。不想,这篇文章成为了打开C++对象模型内存布局的一个引子,引发了大家对C++对象的更深层次的讨论。当然,我之前的文章还有很多方面没有涉及,从我个人感觉下来,在谈论虚函数表里,至少有以下这些内容没有涉及:

1)有成员变量的情况。

2)有重复继承的情况。

3)有虚拟继承的情况。

4)有钻石型虚拟继承的情况。

 这些都是我本篇文章需要向大家说明的东西。所以,这篇文章将会是《C++虚函数表解析》的一个续篇,也是一篇高级进阶的文章。我希望大家在读这篇文章之前对C++有一定的基础和了解,并能先读我的上一篇文章。因为这篇文章的深度可能会比较深,而且会比较杂乱,我希望你在读本篇文章时不会有大脑思维紊乱导致大脑死机的情况。;-)

对象的影响因素

简而言之,我们一个类可能会有如下的影响因素:

1)成员变量

2)虚函数(产生虚函数表)

3)单一继承(只继承于一个类)

4)多重继承(继承多个类)

5)重复继承(继承的多个父类中其父类有相同的超类)

6)虚拟继承(使用virtual方式继承,为了保证继承后父类的内存布局只会存在一份)

上述的东西通常是C++这门语言在语义方面对对象内部的影响因素,当然,还会有编译器的影响(比如优化),还有字节对齐的影响。在这里我们都不讨论,我们只讨论C++语言上的影响。

本篇文章着重讨论下述几个情况下的C++对象的内存布局情况。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (31 人打了分,平均分: 4.00 )
Loading...