2016-12-07 3 views
2

Мой коллега утверждает, что тип-литье возвращаемого значения функции не определен в C, однако я не могу найти что-либо, чтобы поддержать его требование.Допустимо ли вводить тип возвращаемого значения функции C?

Я знаю, что тип литья указатель функции плохо, смотрите здесь: Casting a function pointer to another type

Но я хочу, чтобы подтвердить, что следующий код будет приемлемым и четко определены:

// Some function 
int ret = foo(bar); 

// Some variable with some different type 
unsigned int a; 

// Cast function result to match variable type 
a = (unsigned int) foo(bar); 
+1

0 Не могу представить, почему ваш коллега полагает это - это, безусловно, 'c' язык. Это общая (и требуемая) функциональность. – KevinDTimm

+0

Возвращаемое значение - всего лишь rvalue – user3528438

+0

Любые претензии должны подтверждаться некоторыми доказательствами. У вашего коллеги есть один? В противном случае это называется «спекуляцией». –

ответ

2

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

Один простой пример, который мы используем время от времени, заключается в том, чтобы отличить возвращаемое значение функции round().

Это настолько тривиально, что вы даже можете увидеть это в C Standard, page 567 of this pdf.

В приведенных выше преобразований с плавающей в целое, использование (CAST) х может быть заменена (литой) круглой (х), (литой) ечать (х), (литье) nearbyint (х), (литой) trunc (x), (литой) ceil (x) или (литой) этаж (x)

+0

Конечно. Спасибо, что поддержали ваши претензии! – phreaknik