小编che*_*ers的帖子

手动运行gcc的步骤,编译,组装,链接

如果你有一个简单的C程序,比如

int main(void) {return 0;}
Run Code Online (Sandbox Code Playgroud)

它可以编译 gcc -o test test.c.

据我所知,gcc执行编译,组装然后链接.后两步是通过运行as和实现的ld.

我可以使用生成汇编代码gcc -S test.c.

你会在终端中输入什么内容,将汇编代码转换为可执行文件?

(这样做的原因是学习装配)

c gcc

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

用于在C++ std :: <vector>容器中存储多种类型的结构的模式

我有一个代表火车的数据结构,它可以由许多类型的汽车组成,例如火车引擎,谷物汽车,乘用车等等:

struct TrainCar {
   // ...
   Color color;
   std::string registration_number;
   unsigned long destination_id;
}

struct PowerCar : TrainCar {
   // ...
   const RealPowerCar &engine;
}

struct CargoCar : TrainCar {
   // ...
   const RealCargoCar &cargo;
   bool full;
}

std::vector<TrainCar*> cars;
cars.push_back(new TrainCar(...));
cars.push_back(new TrainCar(...));
cars.push_back(new CargoCar(...));
cars.push_back(new CargoCar(...));
cars.push_back(new CargoCar(...));
Run Code Online (Sandbox Code Playgroud)

算法将遍历列车中的汽车,并决定如何路由/分流每辆车(是否将其保留在列车中,将其移至列车中的另一个点,将其从列车中移除).此代码如下所示:

std::vector<TrainCar*>::iterator it = cars.begin();
for (; it != cars.end(); ++it) {
    PowerCar *pc = dynamic_cast<PowerCar*>(*it);
    CargoCar *cc = dynamic_cast<CargoCar*>(*it);

    if (pc) {
        // Apply some PowerCar routing specific logic …
Run Code Online (Sandbox Code Playgroud)

c++ design-patterns

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

忽略ANTLRworks中的空格

我有以下ANTLR语法:

grammar mygrammar;

ASSIGNMENT 
    :   ID '=' INT
    ;

ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;

INT :   '0'..'9'+
    ;

WS  :   ( ' '
        | '\t'
        | '\r'
        | '\n'
        ) {$channel=HIDDEN;}
    ;
Run Code Online (Sandbox Code Playgroud)

只有ASSIGNMENT规则实际上是我的,其余的是ANTLRWorks 1.4.3添加的默认值.

当我在解释器中尝试语法时,诸如"a = 5"之类的字符串成功,但是诸如"b [space] = [space] 6"之类的字符串失败:由于空格,我得到MismatchedTokenException:

具有MismatchedTokenException的接口的图片

从阅读ANTLR网站,和

Ignore rules: WS
{$channel=HIDDEN}
文本/语法规则,似乎应该忽略空格,但事实并非如此.

我究竟做错了什么?

antlr antlrworks

3
推荐指数
1
解决办法
5371
查看次数

标签 统计

antlr ×1

antlrworks ×1

c ×1

c++ ×1

design-patterns ×1

gcc ×1