main()在C和C++中定义函数的正确(最有效)方法是什么- int main()或void main()- 为什么?如果int main()那么return 1或return 0?
这个问题有很多重复,包括:
main()函数的有效签名是什么?main()函数void main()和int main()?main()在C++中的签名main()? - 对于C++,确实有一个非常好的答案.main()C语言中的函数样式main()C中的方法类型int main()vs void main()在C中有关:
在C语言中调用函数时,我有一些关于默认参数提升的问题.这里是6.5.2.2节"函数调用" C99标准(pdf)中的第6,7和8段(强调添加并分为列表以便于读):
第6段
- 如果表示被调用函数的表达式具有不包含原型的类型,则对每个参数执行整数提升,并将具有类型的参数
float提升为double.这些被称为默认参数促销.- 如果参数数量不等于参数数量,则行为未定义.
- 如果使用包含原型的类型定义函数,并且原型以省略号(
, ...)结尾或者促销后的参数类型与参数类型不兼容,则行为未定义.- 如果使用不包含原型的类型定义函数,并且促销后的参数类型与促销后的参数类型不兼容,则行为未定义,但以下情况除外:
- 一个提升类型是有符号整数类型,另一个提升类型是相应的无符号整数类型,并且该值可在两种类型中表示;
- 这两种类型都是指向字符类型的限定或非限定版本的指针
void.
第7段
- 如果表示被调用函数的表达式具有包含原型的类型,则将参数隐式转换为相应参数的类型,就像通过赋值一样,将每个参数的类型作为其声明的非限定版本类型.
- 函数原型声明符中的省略号表示法导致参数类型转换在最后声明的参数之后停止.默认参数提升是在尾随参数上执行的.
第8段
- 没有其他转换是隐式执行的; 特别是,参数的数量和类型不会与函数定义中不包含函数原型声明符的参数的数量和类型进行比较.
char和short对int/ unsigned int和float到doubleprintf)的可选参数受默认参数提升的约束为了记录,我对函数原型的理解是这样的:
void func(int a, char b, float c); // Function prototype
void func(int a, char b, float c) …Run Code Online (Sandbox Code Playgroud) 我是C编程语言的初学者,最近我研究了getchar函数,它将从控制台或文件中接受一个字符,在键入时立即显示它,我们需要Enter按键才能继续.
它返回unsigned char他们阅读的内容.如果遇到文件结束或错误,则getchar()返回EOF.
我的问题是,当它返回时unsigned char,为什么它的返回值存储在int变量中?
请帮我.
为什么以下电话:
printf("%d %d", 'a', 'b');
Run Code Online (Sandbox Code Playgroud)
导致"正确" 97 98值?%d表示函数必须读取4个字节的数据,而printf不能告诉接收到的参数的类型(格式字符串除外),为什么不打印数字|a||b||junk||junk|?
提前致谢.
c ×4
function ×2
byte ×1
c++ ×1
casting ×1
printf ×1
promotions ×1
prototype ×1
return-type ×1
return-value ×1