Не-void функции, используемые в пустом контексте?


Я использую SystemVerilog. Мой код:

function write_pixel_data(datastr ds);
 /* some stuff here... but no return */
endfunction

Тогда я вызываю свою функцию следующим образом:

write_pixel_data(someval);

И я получаю предупреждение vcs:

Warning-[SV-NFIVC] Non-void function used in void context.

Но я ничего не возвращаю, я знаю, что могу бросить вызов функции в void, чтобы избавиться от предупреждения. Но почему он дает это предупреждение??!!

Спасибо.

2 2

2 ответа:

Если вы не объявили функцию как void и вызываете ее без присвоения возвращаемого значения чему-либо, вы увидите эту ошибку. Простое исправление:

function void write_pixel_data(datastr ds);
 /* some stuff here... but no return */
endfunction
Однако будьте осторожны, вы не можете делать ничего, что "занимает время" в функции. Для этого вам понадобится task.

Функция, объявленная с неявным типом, возвращает logic. Вы должны явно объявить возвращаемый тип как void, если это является вашим намерением.