2015-08-11 1 views
0

Случай A:Почему приведенный ниже код создает ошибку, если один из его параметров не имеет связанного с ним типа данных?

‪#‎include‬<stdio.h> 

    int divide(int a, b) 
    { return 7; } 

    int main() { 
    int a=divide(8,3); 
    printf("%d",a); 
    return 0; 
    } 

Случай B:

#include<stdio.h> 
int divide(a, b) 
{ 
    return 7; 
} 

int main() 
{ 
    int a=divide(8,3); 
    printf("%d",a); 
    return 0; 
} 

Почему Случай А ошибка и ошибка случая B бесплатно?

В случае В соответствии со стандартом C99, она предполагает, что переменные быть типа int но тогда почему не в случае А, почему это тип б не считается типа int?

+0

почему downvote этот вопрос? Это верный вопрос для меня. – Pawan

+0

Просто явным образом даю каждой переменной свой тип .... – Isaiah

+0

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что, кроме OP, никто не заботится. –

ответ

1

Похоже, вы смешиваете список аргументов старого стиля с новым списком аргументов стиля. Старый стиль - это имя только с предполагаемым «int», новый стиль - это тип и имя. Для каждого дополнительного имени или имени типа следует ввести запятую и тип и аргумент.

Кроме того, для старого стиля должны быть декларации внутри функции для типов аргументов, поскольку они не указаны в списке аргументов.

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

например:

int func(char arg1, long arg2, long arg3) { 
    char a,b,c=2,d; 
    long xPos,yPos; 
    ... 
} 

против:

int func(arg1, arg2, arg3) { 
    int arg1,arg2,arg3; 
    char a,b,c=2,d; 
    long xPos,yPos; 
    ... 
} 

смотри также C function syntax, parameter types declared after parameter list

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