c语言定义变量的疑惑

我是一名java程序员,最近做一个linux c项目,我习惯了在哪使用变量就在哪定义。
c语言的变量定义必须在函数头部吗?最近我的c项目遇到头痛的bug,发送的字符串被截断,不知道和我这个习惯有关系没?排查了几个月都没找到更本原因,我快疯了。

阅读 6.7k
8 个回答

没错这是规范,变量都要写在函数的开始因为编译器要预处理

c语言的变量定义无非三种

  1. 函数{}内,必须在头部
  2. 诸如if(){}内,必须在头部
  3. 全局变量,这个位置随意
    不知道题主具体是什么问题呢?

如果我在一个全局hashmap里面put一个局部变量或者一个常量“1”,会不会影响这个hashmap

新手上路,请多包涵

可以把源文件扩展名改成.cpp,.cxx或是.cc,或是强制以C++方式编译源码,然后就可以随处定意变量了,如果禁用C++的RTTI和Exception,也不使用模板,几乎不会因为使用C++代来任何副作用,还可以用命名空间隔离有冲突的符号名,这种C++编程风格叫"Better C"风格,我常以这种风格写内核驱动。有时候在内核代码中用一个命名空间包含应用层头文件,混合使用两者的数据结构定义。

新手上路,请多包涵

C99 支持在非头部位置定义变量。
显然你的 bug 与这个无关,这个是编译时候处理的。。。

新手上路,请多包涵

“发送的字符串被截断”这个问题和“变量定义的位置”问题无关

“发送的字符串被截断” 两种可能:1、仅仅是显示不完全,内存中的字符串依然是完整的, 这要看格式化显示方式;2、内存中字符串被写入了\0,导致\0之后的字符串内容丢失。

新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进