C和C++之间的区别

sch*_*ger 0 c c++

这里给出的代码在由g ++编译时运行正常但在使用gcc进行编译时出错.显然,这对于C++是正确的,但不适用于C.请帮我纠正C的语法.

# include <stdio.h>
typedef struct demo
{
    int arr[20], i;
    void setvalue(int num)
    {for(i=0;i<20;i++)arr[i]=num;}

    void printvalue()
    {for(i=0;i<20;i++)printf("%d ",arr[i]);}
} example;

int main()
{
    example e;
    e.setvalue(100);
    e.printvalue();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误日志:

stov.c:7:2: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘{’ token
stov.c: In function ‘main’:
stov.c:18:3: error: ‘example’ has no member named ‘setvalue’
stov.c:19:3: error: ‘example’ has no member named ‘printvalue’
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 10

您不能在C中使用方法(该结构中的函数).解决这个问题的方法不止一种,但我只是将对象作为函数的第一个参数传递:

void setvalue(struct demo *d, int num)
{
    int i;
    for(i = 0; i < 20; i++)
        d->arr[i] = num;
}


/* ... */
setvalue(&e, 100);
Run Code Online (Sandbox Code Playgroud)

  • @bdonlan:我认为Cory非常挑剔,并指出在C++中,方法被称为*成员函数,这是一个有效的点,但实际上并没有用.:) (6认同)
  • @Cory,你能肯定吗?成员函数是C和C++之间最大的差异之一...... (5认同)
  • @Williham Totland:非常挑剔.这是方法的定义.它们可能没有在C++标准中明确提及,但在更大的OO视角中,它们仍然是方法.使用该术语也有助于清晰,因为它是一种常见的参考形式,因为成员函数不够严格.您需要使用术语"非静态成员函数".http://en.wikipedia.org/wiki/Object-oriented_programming (3认同)