Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我可以在C中的变量声明中使用函数吗?int f(),i;

我可以在C中的变量声明中使用函数吗?int f(),i;
EN

Stack Overflow用户
提问于 2013-09-26 23:41:54
回答 3查看 397关注 0票数 4

通过了解Unix编程,第1.6章,more01.c示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int see_more(), reply;

已尝试一些类似的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

int main()
{
    int hey(), reply;
    return 0;
}

int hey()
{
    printf("Hello");
};

日志中没有错误,但控制台上没有Hello。有人能解释一下吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-26 23:45:55

这将编译得很好。但你所做的就是声明这个函数。这与在顶层添加(非原型)声明是一样的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int hey( );
//      ^ empty parens means it's not a prototype

如果函数是初始化程序的一部分,则可以在声明中调用它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

int main()
{
    int reply=hey();
    //        ^ here the function is called, even though this is a declaration,
    //          because the value is needed.
    return 0;
}
int hey(){
    return printf("Hello");
    // a function returning `int` ought to `return ` an int!
};

但是通常,要调用函数,只需将调用放在(非声明)表达式语句中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

int main()
{
    int reply; // declaring a variable
    int hey(); // declaring a function
    (void) hey();     // function call, casting return value to (void)
    return 0;
}
int hey(){
    return printf("Hello");
};

在一些早期编译器中有一个限制,即只有最后一个声明才能包含函数调用。C99 (以及大多数“现代”编译器)已经放松了这一限制,函数调用现在可以在初始化器中使用而不受惩罚。

IIRC splint语法检查器对初始化器中的函数调用有同样的限制。

它可能被认为是不好的风格,但不一定不正确的调用一个函数没有一个原型。可以肯定的是,它消除了编译器从类型角度检查调用是否合理的能力。但你要做的就是别搞砸了。

非原型函数将默认为标准调用约定,这意味着所有整数args (char、short、int)都将提升到int,而所有浮动args将提升到double。这些提升也适用于使用#include <stdarg.h> (和我们心爱的printf)的各种函数,所以我认为知道如何调用非原型函数非常有用。

我有一些“不要搞砸了”的代码这里,它通过函数指针调用非原型函数。这一切都工作,并符合标准(接近我可以想象),但我不知道如何原型的函数指针,这可能指向许多定型模式之一。使用可变符号(...)是不正确的,因为它不是一回事。只是没有合适的方法来原型它,所以指针被声明为void (*fp)();

票数 4
EN

Stack Overflow用户

发布于 2013-09-26 23:45:33

您只是在那里声明函数,而不是调用它。

如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
  extern int hey(); // there is a function "hey" somewhere

  hey();
}
票数 1
EN

Stack Overflow用户

发布于 2013-09-26 23:45:54

int hey()方法不返回任何值。试着把它变成void hey()

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19045354

复制
相关文章
C++中变量声明与定义的规则
为了支持分离式编译,C++将定义和声明区分开。其中声明规定了变量的类型和名字,定义除此功能外还会申请存储空间并可能为变量赋一个初始值。
TOMOCAT
2021/04/20
2.4K0
python中轻松声明变量和使用
如果变量已经被声明过,在Python中实际上是被初始化赋值过,那么就可以在声明后进行调用,调用的时候,只需要使用变量的名称即可。
刘金玉编程
2019/08/20
1.3K0
python中的int函数_python int()
Int8, 占1个字节. Int16, 占2个字节. Int32, 占4个字节. Int64, 占8个字节.
全栈程序员站长
2022/09/21
8990
js中的变量声明问题
从1,,2中我们可以看出js引擎是先对var声明的变量进行注册,再对函数类型的变量进行注册。 而3和4是一样的原理,js引擎执行到这段代码时,首先注册var a,但是此时的a的值是undefined,然后注册function a,然后开始执行语句a=1,所以输出的是number。
theanarkh
2019/03/06
4.4K0
我应该使用 PyCharm 在 Python 中编程吗?
Python 是一种广泛使用的编程语言,以其简单、多功能和庞大的开发人员社区而闻名。这个社区不断创建新的库和工具,以提高Python编程的效率和便利性。选择正确的环境来编写和调试 Python 代码可能具有挑战性,但 PyCharm 是一个很好的选择,从其他选项中脱颖而出。
很酷的站长
2023/02/20
4.6K0
我应该使用 PyCharm 在 Python 中编程吗?
Linux教程 - 在Shell脚本中声明和使用布尔变量示例
作者:Linux迷链接:https://www.linuxmi.com/shell-boolean-variables.html
用户6543014
2021/01/07
18K0
在cuda的核函数中可以按地址调用普通变量么?
请问在cuda的核函数中可以按地址调用普通变量么? GPU世界论坛 bbs.gpuworld.cn Hi, 楼主, 完全无问题,从Fermi起引入卡内统一编址(Generic Addressing)和卡间统一编址(UVA ) 开始,就毫无压力了,这都8年过去了。 但需要注意这个问题: (1)最终指向global memory地址空间的指针,可以在本次kernel启动,或者下次kernel启动的任何线程中都是有效的。 (2)最终指向local memory的指针,仅在本次kernel启动的本线程
GPUS Lady
2018/04/13
3.2K0
我可以在不source脚本的情况下将变量从Bash脚本导出到环境中吗
有没有一种方法可以通过只执行 export.bash 而不 source 它获取 $VAR?
程序熵
2023/09/25
2060
我可以在不source脚本的情况下将变量从Bash脚本导出到环境中吗
在推荐系统中,我还有隐私吗?联邦学习:你可以有
随着互联网覆盖范围的扩大,越来越多的用户习惯于在网上消费各种形式的内容,推荐系统应运而生。推荐系统在我们的日常生活中无处不在,它们非常有用,既可以节省时间,又可以帮助我们发现与我们的兴趣相关的东西。目前,推荐系统是消费领域最常见的机器学习算法之一[1]。以网络新闻为例,由于每天都有大量的新闻文章发布在网上,在线新闻服务的用户面临着严重的信息过载。不同的用户通常喜欢不同的新闻信息。因此,个性化新闻推荐技术被广泛应用于用户的个性化新闻展示和服务中。关于新闻的推荐算法 / 模型研究已经引起了学术界和产业界的广泛关注。
机器之心
2020/12/03
4.7K0
在推荐系统中,我还有隐私吗?联邦学习:你可以有
【MYSQL函数】MYSQL中IF函数在where中的使用
WHERE IF(条件, true执行条件, false执行条件) 业务需求: 查询SUPPLIER_CLASS=0 and tp1.`TYPE_FLAG` = 1 或者 SUPPLIER_CLASS=1 实现有两种:
用户5640963
2019/07/25
12.3K0
JS的 if 中的函数声明提升
从ES6开始 在严格模式下,块里的函数作用域为这个块。ES6之前不建议块级函数在严格模式下使用. 在ES6非严格模式下, 块中函数声明会出现提升, 所以最好使用函数表达式来定义函数
治电小白菜
2020/08/25
3.8K0
JS的 if 中的函数声明提升
TypeScript 中的变量声明:变量声明的语法、变量的作用域、变量的类型推断和类型断言
TypeScript 是一种由微软开发的静态类型编程语言,它是 JavaScript 的超集,并且可以在编译时进行类型检查。在 TypeScript 中,变量声明是非常重要的一个概念,它定义了变量的名称和类型。通过正确地声明变量,我们可以增强代码的可读性、可维护性和可扩展性。本文将详细介绍 TypeScript 中的变量声明,包括变量声明的语法、变量的作用域、变量的类型推断和类型断言等内容。
网络技术联盟站
2023/07/06
8120
es6中的let声明变量与es5中的var声明变量的区别,局部变量与全局变量
自己通过看typescript官方文档里的let声明,与阮一峰老师翻译的的es6学习文档,总结以下三点 1、var声明可以多次重复声明同一个变量,let不行 2、let变量只在块级作用域里面有效果,var 变量不存在块级作用域(块级作用域指用{}包装的代码块,个人理解) 3、let变量不会声明提前,var变量会 以下是具体例子 for(var i=0;i<10;i++){ setTimeout(function(){console.log(i)},1000); } 由于var声明的变量会声明提升var i
windseek
2018/06/14
1.3K0
sql中declare声明变量_sql怎么定义变量
1、系统变量的特点: (1)、每个客户机成功连接服务器后,都会产生与之对应的会话。会话期间,服务实例会在服务器内存中生成与该会话对应的会话系统变量。这些会话系统变量的初始值都是全局系统变量值的复制,有了标记不同的会话,会话系统又新增了一些变量,这些变量是全局扁郎没有的。
全栈程序员站长
2022/09/24
2.4K0
sql中declare声明变量_什么是变量说明
前言:最近在修改Android项目的后台业务实现,发现很多地方都需要跟数据库的表连接,视图,存储过程打交道,接触一段时间,感觉不会编写sql脚本真是硬伤,在此小结一下。
全栈程序员站长
2022/09/24
9800
【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )
直接修改 指针变量 的值 , 就是为其赋值一个地址值 , 使用 & 取地址符 , 将变量地址赋值给指针变量 , 或者使用 malloc 函数分配内存赋值给 指针变量 ;
韩曙亮
2023/03/29
21.4K0
【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )
Shell中的变量声明和一些特殊变量
$n:传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
陈不成i
2021/06/22
1.1K0
c语言random函数在vc,C++ 中随机函数random函数的使用方法
一、random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。 可改用C++下的rand函数来实现。
全栈程序员站长
2022/09/05
5.8K0
点击加载更多

相似问题

在C中,声明int *p=& i;是错误的吗?

58

我可以在函数声明中传递变量吗?

17

我可以在C++中取消声明变量吗?

30

我可以在C#中声明全局推断变量吗?

48

我可以在“if语句”中声明变量吗?

44
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文