PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.cplus > Unusual C construct - What is it?
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Unusual C construct - What is it?

Réponse
 
LinkBack Outils de la discussion
Vieux 24/12/2007, 06h07   #1
Ramon F Herrera
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Unusual C construct - What is it?


I was looking at some open source code, and found something that I had
never seen before:

const struct ast_datastore_info dialed_interface_info = {
.type ="dialed-interface",
.destroy = dialed_interface_destroy,
.duplicate = dialed_interface_duplicate,
};


What the heck are those dotted variables (?) fields(?). I don't recall
seeing that in the K&R.

I include the full file below.

-Ramon

---------------
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2007, Digium, Inc.
*
* Mark Michelson <mmichelson@digium.com>
*
* See http://www.asterisk.org for more information about
* the Asterisk project. Please do not directly contact
* any of the maintainers of this project for assistance;
* the project provides a web site, mailing lists and IRC
* channels for your use.
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/

/*! \file
*
* \brief globally-accessible datastore information and callbacks
*
* \author Mark Michelson <mmichelson@digium.com>
*/

#include "asterisk/global_datastores.h"
#include "asterisk/linkedlists.h"

static void dialed_interface_destroy(void *data)
{
struct ast_dialed_interface *di = NULL;
AST_LIST_HEAD(, ast_dialed_interface) *dialed_interface_list = data;

if (!dialed_interface_list)
return;

AST_LIST_LOCK(dialed_interface_list);
while ((di = AST_LIST_REMOVE_HEAD(dialed_interface_list, list)))
ast_free(di);
AST_LIST_UNLOCK(dialed_interface_list);

AST_LIST_HEAD_DESTROY(dialed_interface_list);
ast_free(dialed_interface_list);
}

static void *dialed_interface_duplicate(void *data)
{
struct ast_dialed_interface *di = NULL;
AST_LIST_HEAD(, ast_dialed_interface) *old_list;
AST_LIST_HEAD(, ast_dialed_interface) *new_list = NULL;

if(!(old_list = data))
return NULL;

if(!(new_list = ast_calloc(1, sizeof(*new_list))))
return NULL;

AST_LIST_HEAD_INIT(new_list);
AST_LIST_LOCK(old_list);
AST_LIST_TRAVERSE(old_list, di, list) {
struct ast_dialed_interface *di2 = ast_calloc(1, sizeof(*di2) +
strlen(di->interface));
if(!di2) {
AST_LIST_UNLOCK(old_list);
dialed_interface_destroy(new_list);
return NULL;
}
strcpy(di2->interface, di->interface);
AST_LIST_INSERT_TAIL(new_list, di2, list);
}
AST_LIST_UNLOCK(old_list);

return new_list;
}

const struct ast_datastore_info dialed_interface_info = {
.type ="dialed-interface",
.destroy = dialed_interface_destroy,
.duplicate = dialed_interface_duplicate,
};

  Réponse avec citation
Vieux 24/12/2007, 08h04   #2
Ian Collins
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Unusual C construct - What is it?

Ramon F Herrera wrote:

[you posted to the wrong group]

> I was looking at some open source code, and found something that I had
> never seen before:
>
> const struct ast_datastore_info dialed_interface_info = {
> .type ="dialed-interface",
> .destroy = dialed_interface_destroy,
> .duplicate = dialed_interface_duplicate,
> };
>
>
> What the heck are those dotted variables (?) fields(?). I don't recall
> seeing that in the K&R.
>

You won't. Its C99 syntax.

--
Ian Collins.
  Réponse avec citation
Vieux 24/12/2007, 09h02   #3
Abhishek Padmanabh
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Unusual C construct - What is it?

On Dec 24, 11:07am, Ramon F Herrera <ra...@conexus.net> wrote:
> I was looking at some open source code, and found something that I had
> never seen before:
>
> const struct ast_datastore_info dialed_interface_info = {
> .type ="dialed-interface",
> .destroy = dialed_interface_destroy,
> .duplicate = dialed_interface_duplicate,
>
> };
>
> What the heck are those dotted variables (?) fields(?). I don't recall
> seeing that in the K&R.


This is part of C99 syntax and those variables are designated
initialisers. It makes it easier to track which fields are set during
that initialization. It is not valid in C++ though.
  Réponse avec citation
Vieux 25/12/2007, 17h47   #4
mczard@poczta.onet.pl
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Unusual C construct - What is it?

> > const struct ast_datastore_info dialed_interface_info = {
> > .type ="dialed-interface",
> > .destroy = dialed_interface_destroy,
> > .duplicate = dialed_interface_duplicate,

>
> This is part of C99 syntax and those variables are designated
> initialisers. It makes it easier to track which fields are set during
> that initialization. It is not valid in C++ though.


If you need such a thing in C++, you have to use external
configuration files (try http://harpoon.sourceforge.net; my project to
be honest). I really wish it were a part of C++, as well as list
literals; and not only for initialization. For example:

draw_line( Point( x = 10, y = 25 ), Point( x = 50, y = 25 ) );

std::vector<int> list( { 1, 4, 5, 2 } );

  Réponse avec citation
Vieux 25/12/2007, 18h40   #5
Erik Wikström
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Unusual C construct - What is it?

On 2007-12-25 18:47, mczard@poczta.onet.pl wrote:
>> > const struct ast_datastore_info dialed_interface_info = {
>> > .type ="dialed-interface",
>> > .destroy = dialed_interface_destroy,
>> > .duplicate = dialed_interface_duplicate,

>>
>> This is part of C99 syntax and those variables are designated
>> initialisers. It makes it easier to track which fields are set during
>> that initialization. It is not valid in C++ though.

>
> If you need such a thing in C++, you have to use external
> configuration files (try http://harpoon.sourceforge.net; my project to
> be honest). I really wish it were a part of C++, as well as list
> literals; and not only for initialization. For example:


The fact that C++ have constructors mitigates the problem slightly, and
if that is not enough you can use comments.

struct Point {
Point(intx, int y);
};

Point(/*x = */ 10, /*y = */ 25);


> draw_line( Point( x = 10, y = 25 ), Point( x = 50, y = 25 ) );
>
> std::vector<int> list( { 1, 4, 5, 2 } );


Will be in the next version of the standard, but with slightly different
syntax.

--
Erik Wikström
  Réponse avec citation
Vieux 25/12/2007, 22h59   #6
LR
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Unusual C construct - What is it?

Erik Wikström wrote:
> On 2007-12-25 18:47, mczard@poczta.onet.pl wrote:
>>>> const struct ast_datastore_info dialed_interface_info = {
>>>> .type ="dialed-interface",
>>>> .destroy = dialed_interface_destroy,
>>>> .duplicate = dialed_interface_duplicate,
>>> This is part of C99 syntax and those variables are designated
>>> initialisers. It makes it easier to track which fields are set during
>>> that initialization. It is not valid in C++ though.

>> If you need such a thing in C++, you have to use external
>> configuration files (try http://harpoon.sourceforge.net; my project to
>> be honest). I really wish it were a part of C++, as well as list
>> literals; and not only for initialization. For example:

>
> The fact that C++ have constructors mitigates the problem slightly, and
> if that is not enough you can use comments.
>
> struct Point {
> Point(intx, int y);
> };
>
> Point(/*x = */ 10, /*y = */ 25);
>
>
>> draw_line( Point( x = 10, y = 25 ), Point( x = 50, y = 25 ) );



The named parameter idiom might be useful,
http://www.parashift.com/c++-faq-lit...html#faq-10.18

LR



  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 11h20.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,16571 seconds with 14 queries