Deklarieren Sie einen Zeiger auf const oder const-Zeiger auf const als einen formalen parameter

Ich war vor kurzem einige Anpassungen an code, wobei ich mich ändern musste einen formalen parameter in einer Funktion. Ursprünglich sind die parameter ähnlich der folgenden (beachten Sie, dass die Struktur typedef würde früher):

static MySpecialStructure my_special_structure;
static unsigned char char_being_passed;              //Passed to function elsewhere.
static MySpecialStructure * p_my_special_structure;  //Passed to function elsewhere.

int myFunction (MySpecialStructure * p_structure, unsigned char useful_char)
{
    ...
}

Die änderung wurde vorgenommen, da konnte ich definieren und initialisieren my_special_structure vor der Kompilierung und myFunction nie geändert, den Wert der it. Dies führte zu der folgenden Veränderung:

static const MySpecialStructure my_special_structure;
static unsigned char char_being_passed;              //Passed to function elsewhere.
static MySpecialStructure * p_my_special_structure;  //Passed to function elsewhere.

int myFunction (const MySpecialStructure * p_structure, unsigned char useful_char)
{
    ...
}

Mir ist auch aufgefallen, dass, wenn ich lief Fusseln auf meinem Programm, dass es mehrere Info-818 ' s verweisen auf eine Reihe von verschiedenen Funktionen. Die info angegeben, dass "Zeiger-parameter 'x' (Linie 253) deklariert werden könnte als Hinweis auf const".

Nun, ich habe zwei Fragen in Bezug auf die oben genannten. Erste, in Bezug auf den obigen code, da weder die Zeiger noch die Variablen innerhalb MySpecialStructure geändert wird, innerhalb der Funktion, ist es von Vorteil zu deklarieren, die Zeiger als konstant gut? z.B. -

int myFunction (const MySpecialStructure * const p_structure, unsigned char useful_char)

Meine zweite Frage ist in Bezug auf die Lint Informationen. Gibt es irgendwelche Vorteile oder Nachteile zu deklarieren Zeiger als ein konstanter formaler parameter wenn die Funktion sich nicht ändert, seinen Wert... auch wenn das, was Sie auf der Durchreise sind, ist die Funktion nie erklärt, wie eine Konstante? z.B. -

static unsigned char my_char;
static unsigned char * p_my_char;
p_my_char = &my_char;

int myFunction (const unsigned char * p_char)
{
    ...
}

Vielen Dank für Ihre Hilfe!

Bearbeitet für die Klarstellung -

Was sind die Vorteile zu deklarieren, Zeiger auf const oder eine const Zeiger auf const- als einen formalen parameter? Ich weiß, dass ich kann es tun, aber warum würde ich wollen... vor allem in dem Fall, wo der Zeiger übergeben und die Daten auf die es hinweist, sind nicht deklarierte Konstante?

InformationsquelleAutor embedded_guy | 2012-02-23
Schreibe einen Kommentar