Aşağıdaki programa bakınız. Bu programda Gerçek argümanı 'const int' olarak tanımlamak tamam mı, yoksa sadece başlıkta sadece 'int' olarak mı belirtiyorsunuz?
#include <stdio.h>
void f(int a);
int main()
{
f(10);
return 0;
}
void f(const int a)
{
/* a = 20; */ /* Want to avoid accidental modification of a. */
printf("%d\n", a);
}
fonksiyonunun f()
beyanı
int a
var, ancak tanım parametre olarak
const int a
'a sahip.
Bu program hakkında sorularım var.
- Ben
f()
çağıran kod gerçek argümana
f()
içinde sabit olarak kabul edilir olmadığını bilmek zorunda değildir, çünkü bu tamam inanıyoruz. Bu detay birazf()
'a özeldir. Bu, arama kodunun endişelerinden hiçbiri değil. Arayan söz konusu olduğunda,int a
ile ilgili hiçbir şey, her iki durumda daf()
numaralı telefonu ararken değişebilir. Ben haklı mıyım - İşlev tanımlarındaki gerçek bağımsız değişkenleri
const int
veyaconst char *const
olarak bildirmek, ancak yalnızca başlıkta yalnızcaint
veyaconst char *
olarak bildirmek yaygın mıdır? Eğer değilse, bu yolu tavsiye eder misiniz? Bu ikinci soru hedefini devam ettirmek için lütfen bunu yapmanın artılarını ve eksilerini listeleyin.
Hayır, gerçekten sorun değil. Bu bir uyarı vermelidir, çünkü uygulama bildiriden farklıdır. –
@MichaelWalz: Ne Clang ne de GCC bu konuda bir uyarı veriyor, hatta -std = c11 -pedantic -Wamp -Wextra'da bile. –
@MichaelWalz Anladığım kadarıyla, 'f (const int a)' ve 'f (int a)', arayanla aynı şeyi ifade eder, yani her iki durumda da 'f()', 'a' ile ilgili hiçbir şeyi değiştiremez. arayan kişi görebilir. Ayrıca, gcc -Wallra -pedantic -std = c99 foo.c' ile derledim. Hiçbir uyarı yapılmadı. –