2016-11-20 3 views
-5

Когда я запустил этот код, я получил сообщение об ошибке: «имя параметра опущено», я сомневаюсь, что это потому, что я использую printf, который возвращает тип int внутри функции возврата void.using printf в функции возвращает void

* ПРИМЕЧАНИЕ: Я писал этот код для проверки, будет ли указатель изменять значение глобальной переменной успешно или нет?

#include <stdio.h> 

int a = 5 ; 

void call(int) 
{ 
    printf("%d\n",a); 
} 

int main() 
{ 
    int* p = &a; 
    call(a); 
    *p = 6 ; 
    printf("%d\n",a); 
    printf("%d\n",*p); 
    call(a); 
} 
+1

ничтожной вызова (интермедиат а) {...} – bmargulies

+1

Почему вы используете глобальную переменную? –

+0

Как сказано в сообщении для проверки, указатель изменит значение глобальной переменной успешно или нет? –

ответ

0

Кажется, что компилятор рассматривает предупреждения как ошибки. Фактически это определение функции

void call(int) 
{ 
    printf("%d\n",a); 
} 

действительна. Однако компилятор предупреждает вас о том, что имя параметра опущено, хотя функция вызывается с аргументом.

Действительно функция не использует свой параметр. Таким образом, вы можете определить его либо как этот (предпочтительное определение в C)

void call(void) 
{ 
    printf("%d\n",a); 
} 

или как этот

void call() 
{ 
    printf("%d\n",a); 
} 

В этом случае вы должны вызвать функцию как

call(); 

и функция будет полагаться на глобальную переменную a.

Примите во внимание, что если вы обмениваетесь функцию definitiom и определение глобальной переменной, как этот

void call(void) 
{ 
    printf("%d\n",a); 
} 

int a = 5 ; 

то код не будет компилироваться.

Таким образом, было бы лучше, если бы функция не имела дело с глобальными переменными. Так что лучше, чтобы определить функцию как

void call(int a) 
{ 
    printf("%d\n",a); 
} 

и назвать его как

call(a); 
1

Это не печать, это так, как вы называете «звонок».

Если вам не нужно использовать параметр в вызове, он Шоуда быть

#include <stdio.h> 

int a = 5 ; 

void call() 
{ 
    printf("%d\n",a); 
} 

int main() 
{ 
    int* p = &a; 
    call(); 
    *p = 6 ; 
    printf("%d\n",a); 
    printf("%d\n",*p); 
    call(); 
} 
+1

..и если вы намереваетесь использовать параметр, это должно быть 'void call (int a)'. –

Смежные вопросы