小编Her*_*che的帖子

Petri网绘图和代码生成

是否有任何用于绘制Petri网并从中生成任何源代码的软件?源代码可以是任何已知的编程语言......

稍微不太理想的选择是输出一个文件,其中只有基于文本的文件中的Petri网图形的描述,采用某种开放格式,如XML或任何其他数据语言.然后我可以自己编写代码生成器,但至少我想避免gui/graph开发部分;))

谢谢

automation code-generation metaprogramming petri-net

8
推荐指数
2
解决办法
7194
查看次数

具体功能与许多参数与上下文相关

一个例子

假设我们有一个要写的文本,可以转换为"大写或小写",并可以"​​左,中,右"打印.

具体案例实现(功能太多)

writeInUpperCaseAndCentered(char *str){//..}
writeInLowerCaseAndCentered(char *str){//..}
writeInUpperCaseAndLeft(char *str){//..}
and so on...
Run Code Online (Sandbox Code Playgroud)

VS

许多Argument函数(糟糕的可读性,甚至在没有很好的自动完成IDE的情况下很难编写代码)

write( char *str , int toUpper, int centered ){//..}
Run Code Online (Sandbox Code Playgroud)

VS

依赖于上下文(难以重用,难以编码,使用丑陋的全局变量,有时甚至无法"检测"上下文)

writeComplex (char *str)
{    
    // analize str and perhaps some global variables and 
    // (under who knows what rules) put it center/left/right and upper/lowercase
}
Run Code Online (Sandbox Code Playgroud)

也许还有其他选择..(并欢迎)

问题是:

对于这种(经常性)三难问题,是否有任何良好实践经验/学术建议

编辑:

我通常做的是结合"特定情况"实现,内部(我的意思是不在标题中)一般常见的多参数函数,只实现用例,隐藏丑陋的代码,但我不知道是否有一种我不知道的更好的方式.这种事情让我意识到为什么发明OOP.

c arguments function global-variables

7
推荐指数
1
解决办法
257
查看次数

从java对象更新/合并SQLite DB表

这是一个描述问题的最小例子:

假设从SQLiteDB读取表并将其存储在Java Collection对象中

数据库表---> Java对象


idRecord | Data   (table stored at DB)
1         One
2         Two
3         Three
4         Four
Run Code Online (Sandbox Code Playgroud)

并通过一个sqlite jdbc库:

Map objTable = new HashMap(); //...添加一些jdbc的东西,我们在objTable中获得了DBTable的副本

然后,如果对象被修改,那么就是.

idRecord | Data   (modified table stored at objTable)    
2         Two
4         FourModified
5         Five
Run Code Online (Sandbox Code Playgroud)

(id 1和3被删除,2个保持不变,4个被修改,5个被添加)

Java对象 - > DB表(这是问题......)


如何使用DB更新/合并对象表?

为什么我要合并而不是简单地将对象保存到表中

我认为,如果表足够大,那么如果只修改了其中一些记录,那么编写所有记录就没有任何意义.

  • 删除整个DBtable并在(危险的同时)循环中,遍历对象以写入新表.

  • 在第二个java obj中读取DBtable,然后比较两者(使用某种合并alghoritm)并将操作(ADD,DELETE,MODIFY)直接应用于DB.(我会接受推荐的那种比较算法)

  • 编辑:首先 不要创建集合,直接从DB读取和写入,始终通过JDBC传递查询

  • 其他更好的方法

Thanks4Reading

java sqlite collections orm jdbc

6
推荐指数
1
解决办法
1065
查看次数

如何在 gcc / mingw 中进行边界检查?

尝试过这个

int 主函数(无效){

整数a[10];a[20]=5;

}

gcc -Wall -O2 main.c

它没有给我任何警告...

这是Windows(mingw)中的gcc,我无法检测到这种边界限制错误

如何告诉编译器检查它?mingw可以做到吗?

谢谢

c memory-management mingw boundary

5
推荐指数
1
解决办法
3577
查看次数

有没有一种标准的方法来检测硬件的位宽?

int类型的变量据称是"一个机器类型的字长",但在嵌入式系统中,8位微处理器的C编译器使用16位的int!(对于无符号字符为8位)然后对于更多位,int表现正常:在16位微型int中也是16位,在32位微型int中是32位等.

那么,有没有一种标准的方法来测试它,比如BITSIZEOF(int)?

比如"sizeof"就是字节而是比特.

这是我的第一个想法

    register c=1;                
    int bitwidth=0;
    do
    {

        bitwidth++;

    }while(c<<=1);

    printf("Register bit width is : %d",bitwidth);
Run Code Online (Sandbox Code Playgroud)

但是它需要c作为int,并且在8位编译器中通常使用int作为16位,因此它给出了16作为结果,似乎没有使用"int"作为"寄存器宽度"的标准,(或者它不是尊敬的)

为什么我要检测它?假设我需要许多需要少于256个值的变量,因此它们可以是8,16,32位,但是使用正确的大小(与内存和寄存器相同)将加速并节省内存,如果这不是在代码中决定,我必须为每个架构重新编写函数

编辑 阅读完答案后,我找到了这篇好文章

http://embeddedgurus.com/stack-overflow/category/efficient-cc/page/4/

我将引用结论(加粗)

因此,底线是这样的.如果您想开始编写高效,可移植的嵌入式代码,您应该采取的第一步是开始使用C99数据类型"最少"和"快速".如果你的编译器不符合C99,那就 一直抱怨 - 或者改变供应商.如果您进行此更改,我认为您会对代码大小和速度的改进感到惊喜.

c embedded optimization cpu-registers

5
推荐指数
3
解决办法
713
查看次数

如何在MySQL表中选择特定的值范围?

以下是我的MySQL表.我想从我的表中选择一个特定范围的值hello.

name      age        job       gender

A         33         dgfd      m
b         44         gdfg      f
c         21         jhkh      m
e         23         etertr    m
Run Code Online (Sandbox Code Playgroud)

我如何选择年龄在20-30岁之间的男性.

SELECT hello.*
WHERE hello.age='20-30' AND hello.gender='m';
Run Code Online (Sandbox Code Playgroud)

mysql sql select

5
推荐指数
2
解决办法
2万
查看次数

如何确定(在运行时)变量是否注释为已弃用?

此代码可以检查是否已弃用

@Deprecated
public classRetentionPolicyExample{

             public static void main(String[] args){  
                 boolean isDeprecated=false;             
                 if(RetentionPolicyExample.class.getAnnotations().length>0){  
                     isDeprecated= RetentionPolicyExample.class  
                                   .getAnnotations()[0].toString()
                                   .contains("Deprecated");  
                 }  
                 System.out.println("is deprecated:"+ isDeprecated);             
             }  
      }
Run Code Online (Sandbox Code Playgroud)

但是,如何检查是否有任何变量注释为已弃用?

@Deprecated
Stringvariable;

java reflection annotations deprecated

5
推荐指数
1
解决办法
881
查看次数

是"} while(0);" 总是等于"break;} while(1);"?

我比较了gcc汇编程序的输出

do{ 

//some code 

}while(0);
Run Code Online (Sandbox Code Playgroud)

do{

//some code

 break; 
}while(1);
Run Code Online (Sandbox Code Playgroud)

输出是相等的,有或没有优化,但..

一直都是这样吗?

没有实验可以证明理论,它们只能证明它们是错误的

c c++ break while-loop do-while

4
推荐指数
2
解决办法
2037
查看次数

这些图表叫什么?(答案:铁路图)

我在一些帮助文件和src文档中看到了很多这些图表

他们叫什么?还有其他(用于相同目的)已知图表吗?

在此输入图像描述

来源:http://www.sqlite.org/images/syntax/insert-stmt.gif

diagram sequence-diagram diagramming

4
推荐指数
1
解决办法
518
查看次数

确保在每次调用B(抽象实现的方法)后调用方法A?

有这个有品位的课程

     public abstract class CakeSkill 
     {

         //.. 

         boolean cherry=false;

         private void finalMandatoryTouch()
         {        
              cherry=true;
         }                
         abstract public void cook();
     }
Run Code Online (Sandbox Code Playgroud)

扩展它的类就像是

     class Cheff extends CakeSkill 
     {
         //..

         void cook()
         {
         //..Secret recipe
         }     
     }
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用,

finalMandaroryTouch()没有被调用,那么没有蛋糕会以樱桃结束.

[编辑]

可能是一个解决方案

       class MemoriousCheff extends CakeSkill 
       {
           //..

           void cook()
           {
               //..Secret recipe
               finalMandatoryTouch();
           }     
       }
Run Code Online (Sandbox Code Playgroud)

要求:

  • Cheff有一个完美的记忆,不要忘记调用finalMandatoryTouch()
  • 使finalMandatoryTouch()受到保护(至少)

[/编辑]

这会很棒!(但没有Java)如果可以这样做的话

  abstract public void cook()   
  {  
    @implementedMethod

    finalMandatoryTouch();        
  }
Run Code Online (Sandbox Code Playgroud)

如何实现这个有用的功能?

非常感谢你

java

4
推荐指数
1
解决办法
351
查看次数