专栏首页C语言入门到精通基础知识 | 每日一面(67)

基础知识 | 每日一面(67)

古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:能否混用旧式的和新型的函数语法?

小林:这样做是合法的。但是, 现代的做法是在声明和定义的时候都是用原型形式。旧式的语法被认为已经废弃, 所以某一天对它的官方支持可能会取消。

读者:为什么声明 extern int f(struct x *p); 报出了一个奇怪的警告信息 “结构 x 在参数列表中声明”?

小林:与C语言通常的作用范围规则大相径庭的是, 在原型中第一次声明 的结构不能和同一源文件中的其它结构兼容, 它在原型的结束出就超出了作用范围。要解决这个问题, 在同一源文件的原型之前放上这样的声明:struct x;它在文件范围内提供了一个不完整的结构 x 的声明, 这样, 后续的用到结构x的声明至少能够确定它们引用的是同一个结构 x。

读者:我不明白为什么我不能象这样在初始化和数组维度中使用常量:

const int n = 5; int a[n];

小林:const 限定词真正的含义是 “只读的”; 用它限定的对象是运行时 不能被赋值的对象。因此用 const 限定的对象的值并不完全是一个真正的常量。在这点上 C 和 C++ 不一样。如果你需要真正的运行时常量, 使用预定义宏 #define(或enum)。

有时候,正是那些意想不到之人,成就了无人能成之事。

——图灵

本文分享自微信公众号 - C语言入门到精通(gh_780327809188),作者:闫小林

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言 | 每日基础(56)

    读者:为什么声明 extern int f(struct x *p); 报出了一个奇怪的警告信 息 “结构 x 在参数列表中声明”?

    C语言入门到精通
  • 基础知识 | 每日一练(3)

    ——菜根谭

    C语言入门到精通
  • 基础知识 | 每日一练(193)

    cout << boolalpha << ((i & (i - 1)) ? false : true) << endl;

    C语言入门到精通
  • Leetcode 140 Word Break II

    Given a string s and a dictionary of words dict, add spaces in s to construct a...

    triplebee
  • golang——为什么有的语言要把变量类型写在后面?

    Golang当中的变量类型和C/C++比较接近,一般用的比较多的也就是int,float和字符串。Golang当中不一样的地方主要有几点,第一点是严格区分了in...

    TechFlow-承志
  • C++基础变量

    变量的基本形式是:首先是类型说明符,随后紧跟有一个或者多个的变量名组成的列表,其中含有多个变量名时用逗号隔开,最后以分号结束。

    羊羽shine
  • ES6常用新特性学习1-let和const

    在ES6以前,变量的声明都是使用var关键字,且会进行变量声明提升。另外,我们曾经讲过,JS中是没有块级作用域的,这一点也带来了很多的不便。ES6 新增了let...

    love丁酥酥
  • var、let、const的区别

    用 var 声明的变量的作用域是它当前的执行上下文,它可以是嵌套的函数,或者对于声明在任何函数外的变量来说是全局。

    三分恶
  • 三分钟学 Go 语言——常量+各种类型转换

    不过要枚举还是用 go 自带的特殊常量好一点,这种特殊被认为是可以被编译器修改的常量

    机智的程序员小熊
  • go语言数值类型及布尔类型

    常量声明常量是程序在编译时就确定的值,程序在执行时不能修改常量的值。声明常量使用关键字const。在声明常量时,需要对常量赋值。const 名称 类型 = 值 ...

    暮雨

扫码关注云+社区

领取腾讯云代金券