Kunio
Kunio

Reputation: 149

Warning: Function must be extern error in C

I am following along a tutorial for C programming in 6502 Assembly and am having a great deal of difficulty on the 3rd step. When compiling my code in the command line, i get these errors:

test4.c(8): Error: '{' expected

test4.c(9): Warning: Function must be extern

test4.c(9): Error: ';' expected

test4.c(13): Error: '}' expected

I am using a program to compile .c files made in code::blocks to .nes files. The current tutorial is having me also make .s assembly file when compiling in the cl65 command line in Windows from the program that is compiling it. Here is the link to the tutorial page i am on: https://helloacm.com/tutorial-3-c-programming-in-6502-using-assembly/

I have tried many different combinations of code that i can think of to try and get rid of a least some of the problems, but alas to no avail. I am an amateur in C, usually use C++ but i cannot and still trying to figure this out. I was not able to find the "Function must be extern" error anywhere with a quick google search either. Anyone have an idea what's going on?

Here is how i wrote the code in code::blocks:

void main()
{
    asm("nop");
}

void testasm()

void main()
{
    while(1) {
    testasm(); // call the assembled function
}
}

Also, had a really difficult time following along on this particular tutorial part.

Thanks in advance, any help is appreciated on diagnosing the problem!

Upvotes: 0

Views: 100

Answers (1)

Jonathon Reinhart
Jonathon Reinhart

Reputation: 137398

Perhaps this is what you're after?

void testasm()
{
    asm("nop");
}

void main()
{
    while(1) {
        testasm(); // call the assembled function
    }
}

Your code had two main() functions, and a prototype void testasm() with no terminating semicolon.


Alternatively, if testasm is written in assembly, your code should look like this (removing the extra main function):

extern void testasm();    // `extern` not specifically required, but may be for
                          // your particular compiler

void main()
{
    while(1) {
        testasm(); // call the assembled function
    }
}

You need to be much more careful writing code.

Upvotes: 1

Related Questions