混合声明和代码

2023-11-23

当我使用“gcc -o dene -Wall -ansi -pedantic-errors dene.c”编译函数时 ,gcc 不会发出错误。(你能在 if 循环中查看以 char .... 开头的行吗?)

        static void remove_negation(char *s,char *s1) 
          {
             char **cmainp=malloc(sizeof(char*)*1);   
                        int len=0;int d=0; int i=0;
            cmainp[0]=malloc(sizeof(char)*300);
            len=strlen(s);
           for(i=0;i<len;++i)
             { if(s[i]=='-')
               if(i==0 || s[i-1]==',')
      /*look*/  {char *p=malloc(sizeof(char)*3); /*look*/

                ++i;    p[0]=s[i];   p[1]='\0'; 

              strcat(s1,","); strcat(s1,p); free(p);
               continue;
             }
            cmainp[0][d]=s[i]; 
               ++d;
               } cmainp[0][d+1]='\0'; 


             strcpy(cmainp[0],s);
             free(cmainp[0]);
              }

但是,当编译上面的函数时,用 gcc 重新格式化 ,gcc 发出该错误;

“dene.c:10: 错误:ISO C90 禁止混合声明和代码”

        static void remove_negation(char *s,char *s1) 
          {
             char **cmainp=malloc(sizeof(char*)*1);    
          /*look*/ cmainp[0]=malloc(sizeof(char)*300); /*look*/
                        int len=0;int d=0; int i=0;

            len=strlen(s);
           for(i=0;i<len;++i)
             { if(s[i]=='-')
               if(i==0 || s[i-1]==',')
        {char *p=malloc(sizeof(char)*3);

                ++i;    p[0]=s[i];   p[1]='\0'; 

              strcat(s1,","); strcat(s1,p); free(p);
               continue;
             }
            cmainp[0][d]=s[i]; 
               ++d;
               } cmainp[0][d+1]='\0'; 


             strcpy(cmainp[0],s);
             free(cmainp[0]);
              }

最后一个,gcc 发出以下错误

dene.c:16:错误:“char”之前的预期表达式

dene.c:20: 错误:'p1' 未声明(在此函数中首次使用)

dene.c:20: 错误:(每个未声明的标识符仅报告一次

dene.c:20: 错误:对于它出现的每个函数。)

        static void remove_negation(char *s,char *s1) 
          {
             char **cmainp=malloc(sizeof(char*)*1);    

                        int len=0;int d=0; int i=0;
             cmainp[0]=malloc(sizeof(char)*300); 
            len=strlen(s);
           for(i=0;i<len;++i)
             { if(s[i]=='-')
        /*look*/   char *p=malloc(sizeof(char)*3);   /*look*/
               if(i==0 || s[i-1]==',')
              {

                ++i;    p[0]=s[i];   p[1]='\0'; 

              strcat(s1,","); strcat(s1,p); free(p);
               continue;
             }
            cmainp[0][d]=s[i]; 
               ++d;
               } cmainp[0][d+1]='\0'; 


             strcpy(cmainp[0],s);
             free(cmainp[0]);
              }

问题是为什么它们之间存在差异。


在 K&R 和 ANSI c 中,必须始终将声明放在作用域块的开头。这个要求在c99中放宽了。

那么,什么是范围块?一个区域由{ and }.

所以在上面的例子中声明

{
   char *p=malloc(sizeof(char)*3); /* ...

是可以的,因为它在 a 之后立即发生{, while

{
  char **cmainp=malloc(sizeof(char*)*1);    

  /*look*/ cmainp[0]=malloc(sizeof(char)*300); /*look*/

  int len=0;...

失败,因为分配发生在{和第二个声明(int len=0;).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

混合声明和代码 的相关文章

随机推荐

  • 如何在带有 Entity Framework Core 1.0 (EF7) 的脚手架 DbContext 中使用数据库视图

    很遗憾实体框架核心 1 0 以前称为实体框架 7 尚不支持视图 我正在尝试使用表来 伪造 它 然而脚手架dotnet dbcontext ef scaffold命令当前无法识别或生成视图 我想要一个允许查询视图和更新表的 DbContext
  • 在 getStaticProps 函数中序列化 Next.js 时出错?

    我在用着getStaticProps 函数 我无缘无故地收到此错误 错误 序列化错误 posts 0 从返回getStaticProps在 原因 object object Object 无法序列化为 JSON 请仅返回 JSON 可序列化
  • 使用 php 获取 mysql 表中记录总数的最佳方法是什么?

    从大表中选择记录总数的最有效方法是什么 目前 我只是在做 result mysql query SELECT id FROM table total mysql num rows result 有人告诉我 如果表中有很多记录 这不是很有效或
  • stringByAppendingPathComponent,它是如何工作的?

    编辑 v002 我看了所有的评论 我开始明白我应该做什么 为此 我修改了我的代码 见下文 我将 newPath 更改为 NSString 删除了 alloc init 和结束 release 因为它现在由系统处理 我正在使用 stringB
  • 向量上的修改时复制语义不会在循环中追加。为什么?

    这个问题听起来似乎得到了部分回答here但这对我来说还不够具体 我想更好地理解何时通过引用更新对象以及何时复制对象 更简单的例子是向量增长 下面的代码在 R 中效率极低 因为在循环之前没有分配内存 并且在每次迭代时都会创建一个副本 x ru
  • Java中有instanceOf(Class c)之类的东西吗?

    我想检查一个对象是否o是该类的一个实例C或的一个子类C 例如 如果x属于班级Point I want x instanceOf Point class to be true并且x instanceOf Object class to be
  • 在 Matlab 中通过函数句柄传递附加参数

    我有一个需要优化的函数 比如 Matlab 中的 Function 该函数取决于我想要优化的变量 例如 x 和一个不需要优化的参数 例如 Q 因此 函数 Function x Q 换句话说 我有一个 Q 值数组 并且想要为每个 Q 找到最佳
  • 获取现有的或创建新的 akka actor

    我正在尝试使用 ActorFor 获取现有的 ActorRef 或创建一个新的 ActorRef 如果它不存在 我有以下代码 但它似乎没有按预期工作 isTermminate 始终为 true ActorSystem system Acto
  • 原子操作会阻塞其他线程吗?

    我试图让 原子与非原子 的概念在我的脑海中扎根 我的第一个问题是我找不到 现实生活中的类比 就像原子操作上的客户 餐厅关系或类似的东西 我还想了解原子操作如何将自己置于线程安全编程中 在这篇博文中 http preshing com 201
  • 安装:Microsoft Visual C++ Redistributable 卡在“正在处理:Windows7_MSU_X64”

    我正在尝试安装 Microsoft Visual C Redistributable 软件包 因为无法安装我的 xampp apache 模块 安装需要很长时间才能完成 我应该怎么办 这种情况常见吗 我所要做的就是等待吗 他们完全被这个设置
  • 如何检查FormData?

    我试过了console log并使用循环遍历它for in 这里是MDN 参考在 FormData 上 两种尝试都在这fiddle var fd new FormData key poulate with dummy data fd app
  • 在 PyQt 中绘制多边形

    背景 我想在屏幕上绘制一个简单的形状 并且我选择 PyQt 作为要使用的包 因为它似乎是最成熟的 我并没有以任何方式锁定它 Problem 仅在屏幕上绘制一个简单的形状 例如多边形 似乎过于复杂 我发现的所有示例都尝试做很多额外的事情 但我
  • 需要无效 Swing 组件的高度

    基本设置是这样的 我有一个垂直的 JSplitPane 我想要一个固定大小的底部组件和一个调整大小的顶部组件 我通过调用来完成setResizeWeight 1 0 在此应用程序中 有一个按钮可恢复 默认 窗口配置 窗口的默认高度是桌面高度
  • 向量化模运算

    我正在尝试编写一些相当快速的分量向量加法代码 我正在使用 我相信是有符号的 64 位整数 函数是 void addRq int64 t a const int64 t b const int32 t dim const int64 t q
  • 以下冒号 (:) 在 MATLAB 语法中意味着什么?

    a imread autumn tif a double a row col dim size a red a 1 green a 2 blue a 3 冒号有什么作用 最后三行是什么意思 上面的片段来自 Dhananjay Thecked
  • 如何在 Junit3 中获得 @BeforeClass 和 @AfterClass 等效项?

    我想在用测试装置替换应用程序的数据库之前备份它 由于 Android 限制 我被迫使用 Junit3 并且我想实现 BeforeClass 和 AfterClass 的等效行为 更新 现在有一个工具 Junit4Android 以获得支持
  • 使用 IText 创建 Pdf 文档#

    如何创建带有表格的 pdf 文档 如下所示 添加命名空间 using iTextSharp text using iTextSharp text pdf 使用c 的代码 Document doc new Document PageSize
  • SimpleAdapter、微调器中的文本和图像

    我有一个小问题 好吧 让我首先说明我想要实现的目标 我有一个旋转器 可以从存储的数组中提取字符串 就像这样 你不需要阅读它 ArrayAdapter
  • Android 中类似 iPhone 的标签栏?

    在 iPhone 中 我们可以创建一个具有选项卡栏的视图 并将其作为应用程序的根视图 然后使用选项卡栏在子视图中导航 Android 中与此最接近的方法是什么 是使用选项卡式控件吗 但这包括仅使用一项活动 在 Android 中使用什么方法
  • 混合声明和代码

    当我使用 gcc o dene Wall ansi pedantic errors dene c 编译函数时 gcc 不会发出错误 你能在 if 循环中查看以 char 开头的行吗 static void remove negation c